1. lateinit
선언만 하고 나중에 할당할때는 lateinit 키워드를 사용한다.
기본자료형에서는 사용할 수 없다.
::변수.isInitialized
변수에 값이 할당되었는지 여부
[code]
fun main() {
val a = LateInitSample()
println(a.getLateInitText())
a.text = “안녕하세요”
println(a.getLateInitText())
}
class LateInitSample {
lateinit var text: String
fun getLateInitText(): String {
if (::text.isInitialized) {
return text
} else {
return “기본값”
}
}
}
[/code]
결과
[code]
기본값
안녕하세요
[/code]
2. lazy
lamda 함수로 초기화 구문만 정의해 놓고 실제 초기화는 해당 변수를 사용할때 자동 적용된다.
[code]
fun main() {
val number: Int by lazy {
println(“초기화를 합니다”)
7 // 마지막 줄이 리턴된다
}
println(“코드를 실행합니다”)
println(number) // 처음 사용할때 초기화 된다
println(number)
}
[/code]
결과
[code]
코드를 실행합니다
초기화를 합니다
7
7
[/code]