Kotlin
코틀린 lateinit과 by lazy
SKaSha
2019. 7. 23. 00:56
코틀린은 null 처리가 매우 엄격한데, null이 사용되지 않는 프로퍼티에 초기화 시점을 미룸으로써 null 허용으로 선언할 필요가 없습니다.
lateinit
class User {
lateinit var lateData: String
}
fun main(args: Array<String>) {
val user = User()
user.lateData = "hello world"
println(user.lateData)
}
실행결과
hello world
사용 규칙
- var로 선언한 프로퍼티에만 사용할 수 있다.
- 클래스 몸체에 선언한 프로퍼티에만 사용할 수 있다. 주 생성자에는 사용할 수 없다.
- 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.
- null 허용 프로퍼티에는 사용할 수 없다.
- 기초 타입 프로퍼티에는 사용할 수 없다.
by lazy
초기화를 늦게하는 Delegated 프로퍼티로써, 프로퍼티에 대한 getter/setter를 위임하여 위임받은 객체로 명령을 수행한다.
class User {
val name: String by lazy {
println("return name lazy")
"Lazy"
}
val age: Int by lazy {
println("return age lazy")
27
}
init {
println("user init")
}
constructor() {
println("user sub constructor")
}
}
fun main(args: Array<String>) {
val user = User()
println("name : ${user.name}")
println("age : ${user.age}")
}
실행결과
user init
user sub constructor
return name lazy
name : Lazy
return age lazy
age : 27
사용 규칙
- 호출 시점에 초기화 진행.
- val로 선언한 프로퍼티에만 사용 가능
- 클래스 몸체 이외에 최상위 레벨에서 사용 가능
- 기초 타입에도 사용 가능