본문 바로가기

분류 전체보기556

Kotlin] 29. 중첩 클래스 기본적으로 자바의 경우 클래스 내부에 클래스를 선언하면 자동적으로 inner 클래스로 묶이는데, 코틀린은 그렇지 않다. 아무런 조치 없이 내부에 선언되는 경우, 두 인스턴스를 공유하지 않고 그저 따로 움직이는 클래스가 된다. 예시를 보자. package nestedClassExample class Outer { class Nested{ fun hello() = println ("중첩된 클래스") } } fun main() { val instance : Outer.Nested = Outer.Nested() instance.hello() } Outer 클래스 내부에 Nested 클래스가 선언된 상태이다. 호출할때는 외부클래스.내부클래스 순서로 호출하면 내부클래스를 호출 할 수 있다. 결과가 어떻게 나올까? .. 2020. 12. 10.
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.
반응형