코틀린은 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로 선언한 프로퍼티에만 사용 가능
- 클래스 몸체 이외에 최상위 레벨에서 사용 가능
- 기초 타입에도 사용 가능
'Kotlin' 카테고리의 다른 글
| 코틀린 제네릭 (가변성, 스타 프로젝션, reified) (0) | 2019.11.30 |
|---|---|
| 코틀린 object (0) | 2019.08.02 |
| 코틀린 한정클래스 (Sealed) (0) | 2019.08.02 |
| 코틀린 Unit vs Nothing (0) | 2019.08.02 |
| 코틀린 재귀함수 tailrec (0) | 2019.08.02 |