일반 래퍼클래스라면 초기화가 쉽겠지만, 사용자 정의 타입은 초기화가 쉽지 않다. 이를 초기화 해주는 키워드가 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("너비 : ${rect.width}")
println("너비 : ${rect.height}")
println("너비 : ${rect.area}")
}
자바는 굳이 초기화를 하지 않아도 변수를 선언할 수 있지만 코틀린은 그럴 수 없다. 만약에 초기화 하지 않는다면
Property must be initialized or be abstract
라는 컴파일 오류를 일으킨다. 코틀린은 자바와 다르게 최대한 늦추어 초기화를 하기 때문이다. lateinit는 변수를 선언할 때, null은 아니지만 초기화를 미루어야 할 때 사용한다.
반응형
'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글
Kotlin] 29. 중첩 클래스 (0) | 2020.12.10 |
---|---|
Kotlin] 28. 다이아몬드 문제 (0) | 2020.12.10 |
Kotlin] 26. const (0) | 2020.12.10 |
Kotlin] 25. inline 함수 (0) | 2020.12.10 |
Kotlin] 24. 동반자 객체(Companion Object) (0) | 2020.12.10 |