반응형
변수를 선언할 때 초깃갑을 할당할 수 없는 경우가 있다
이때 값을 이후에 할당할 것이라고 컴파일러에게 알려주어야 한다.
lateinit나 lazy 키워드를 이용한다.
lateinit (늦은 초기화?) 선언한 변수는 선언과 동시에 초깃값을
할당하지 않아도 되지만 모든 유형의 변수 선언에 사용할수 없는
2가지 규칙이 있다.
- lateinit은 var 키워드로 선언한 변수에만 사용 가능
- Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용 불가
lateinit val data1:String // error!!!
lateinit var data1:String // success !!!
lazy (게으른?) 변수 선언문 뒤에 by lazy { } 형식으로 선언
소수에서변수가 최초로 이용되는 순간 중괄호로 묶은 부분이 자동 실행
그 결괏값이 변수의 초깃값으로 할당
lazy 문의 중괄호 부분을 여러 줄로 작성한다면 마지막 줄의 실행결과
가 변수의 초깃값 된다.
val data: Int by lazy {
println("lazy ~ lazy")
10
}
fun main() {
println(" start main ")
println(data + 10)
println(data + 10)
}
// 결과
// start main
// lazy ~ lazy
// 20
// 20
728x90