Android/안드로이드 스터디(Kotlin)61 Kotlin] 28. 다이아몬드 문제 이 코드를 보면, Father, Mother은 Parent를 상속하고, Child는 인터페이스 두개를 구현(implement)한다. 그렇다면 Child에서 말하는 super은 Mother interface여야 하는가, Father interface여야 하는가. 이것이 다이아몬드 문제이다. 잘 보면 super 키워드에 컴파일 오류가 나있다. 즉, 해결법은 super 키워드를 호출할때 어떤 인터페이스를 호출할건지 지정해주면 된다. package diamondQuestion interface Parent{ fun follow() : Unit } interface Mother : Parent { override fun follow() = println("Mother follow") } interface Fath.. 2020. 12. 10. Kotlin] 27. lateinit 일반 래퍼클래스라면 초기화가 쉽겠지만, 사용자 정의 타입은 초기화가 쉽지 않다. 이를 초기화 해주는 키워드가 lateinit이다. 예시를 보자. package lateinitExample class Point(val x : Int, val y : Int) class Rect{ lateinit var pt : Point lateinit var pt2 : Point val width : Int get() = pt2.x-pt.x val height : Int get() = pt2.y-pt.y val area get() = width * height } fun main() { val rect = Rect() rect.pt = Point(3,3) rect.pt2 = Point(6,5) println("너비 : $.. 2020. 12. 10. Kotlin] 26. const const는 inline처럼 컴파일 될 때, 함수가 호출된 자리가 리터럴로 대체처리된다. package constExample const val hello = "Hello" + "World" object Foo { const val bar = "bar" } fun main() { println(hello) println(Foo.bar) println(hello) println(Foo.bar) } hello와 객체 내의 bar이 리터럴 형태를 가지고 있다. 이것은 컴파일 될 때 fun main() { println("HelloWorld") println("bar") println("HelloWorld") println("bar") } 로 대체된다. 따라서 결과가 결과 : HelloWorld bar Hell.. 2020. 12. 10. Kotlin] 25. inline 함수 코틀린이나 자바나, 객체지향 언어라 함수를 만나면 함수 내의 행동을 실행하고, 다시 Main 함수 내로 돌아와서 다음 행동을 실행한다. 이런 행동은 프로그램 성능을 저해하는 요인 중 하나가 된다. inline 키워드를 사용하면 굳이 돌아올 필요가 없어진다. package inlineExample inline fun hello(){ println("Hello") println("World") } fun main() { hello() hello() hello() } 이 코드는 컴파일할때 다음과 같이 변환한다. fun main() { println("Hello") println("World") println("Hello") println("World") println("Hello") println("World.. 2020. 12. 10. 이전 1 ··· 6 7 8 9 10 11 12 ··· 16 다음 반응형