LATEINIT & BY LAZY
lateinit : 늦은 초기화
by lazy : 게으른 초기화 (프로퍼티 위임 초기화)
class Player{
var nick: String
}
위와 같은 코드가 있다고 생각해보자 이 코드는 에러가 난다. 왜 ??
kotlin에서 필드맴버는 반드시 초기화를 시켜줘야 하기때문에
var nick: String = ""
이런식이나
var nick: String
init {
nick = "aaa"
}
이런식으로 init 블럭에 초기화를 해주어야 한다.
또는 nullable을 사용해야 하는데 불필요한 nullable을 사용할 이유또한 없다.
lateinit var nick: String
그래서 쓰는것이 lateinit이다 언젠가는 초기화를 하겠다 라는것이다. 초기화전에 변수를 참조하면 당연히 예외가 발생한다.
by lazy는 함수형 초기화 블록으로써 해당 변수가 처음 참조 될때 초기화 블록이 초기화를 시킨다.
val name : String by lazy {
println("my name is ")
"choi"
}
이 두가지를 쓰는이유는 null 처리의 복잡도도 줄일수 있고 불필요한 메모리를 사용하지 않아도 된다.
lateinit : 늦은 초기화
- var(mutable) 변수 초기화를 의도적으로 지연시키는 방법
- nullable에서도 null로선언과 동시에 초기화 하지 않고 ,init{} 에서 초기화 하지 않아도 된다.
- 해당 property를 사용하고자 할 때 초기화를 진행하고 바로 사용할 수 있다.(초기화 안하고 접근시 예외발생)
by lazy : 게으른 초기화 (프로퍼티 위임 초기화)
- val 상수 에 지정
- property 초기화를 위한 위임 블록을 지정하여 맨 처음 참조시 단 한번의 초기화를 진행하는 방법
- 맨 처음 참조시에 값을 얻게 되므로 null처리가 전혀 불필요함.