코틀린은 기본적으로 NULL을 허용하지 않아서 무조건 값을 체워넣거나
명시적인 데이터의 입력 혹은 널 허용에 대해 고려해야 한다고 생각할수있으나
늦은 초기화를 통해 필요한 경우에만 값을 추가하여 사용할수도 있다.
예제는 다음과 같다.
private val value1 : String by lazy {
println("초기화")
getValue()
}
private lateinit var value2 : String
fun getValue(): String {
return "value1"
}
fun main(){
value2 = "value2"
}
by lazy의 경우 일반적인 변수 선언와 동일하게 값을 대입하는 것으로 보이지만, 사실 변수를 사용하기 전에 값을 대입한다. 따라서 value1 변수를 2번 실행하게 되면 "초기화"라는 로그는 1번만 출력되는 것을 확인 할 수 있다.
lateinit의 경우 기본적으로 null의 상태를 유지하고 있다가 사용하기 직전에 값을 대입하게 된다.
위 2가지 방법의 가장 큰 차이점은 다음과 같다.
변수 선언 | NULL | 변수 대입 | |
by lazy | val | X | 최초 1회 |
lateinit | var | O | 여러번 선언 가능 |
상황에 맞게 잘 활용하면 빌드 시 시간 절약이나 메모리 절약에 도움이 많이 될듯 하다.