lateinit - 지연 초기화
프로퍼티를 선언할 때 초기화하는 작업을 뒤로 미루어서 값을 할당하지 않고 선언할 수 있게하는 키워드이다.
var
프로퍼티만 사용 가능하며, 기본 자료형(Primitive
Type
)에는 사용할 수 없다.isInitialized()
를 사용하여 초기화 여부를 확인할 수 있으며, 초기화하지 않고 사용하면 에러가 발생한다.
fun main() {
val sample = Sample()
println(sample.getText())
sample.text = "new value"
println(sample.getText())
}
class Sample{
lateinit var text: String
fun getText(): String = if (::text.isInitialized) {
text
} else {
"default value"
}
}
// default value
// new value
lazy - 초기화 지연
프로퍼티를 선언할 때 초기화 코드를 정의하고 최초 호출될 때 초기화 코드가 동작하도록 하는 키워드이다.
val
프로퍼티만 사용 가능하기에 값을 변경할 수 없다.by lazy
를 붙이고 람다 함수를 정의하면 되고 함수 안에 여러 개의 구문이 들어갈 수 있으며 마지막 구문의 값이 프로퍼티에 할당된다.
fun main() {
val number: Int by lazy {
println("초기화")
100
}
println(number) // 초기화 진행
println(number) // 이미 초기화가 되었기 때문에 다시 초기화 코드를 실행하지 않음
}
// 초기화
// 100
// 100