제목의 2가지는 변수를 늦게 초기화하는 방법들이다.
클래스 안에서 이 변수를 사용할 것이다 라고 선언만 해 놓고 나중에 해당 변수를 사용하는 시점에서 값을 입력해주어서 사용하는 것을 말합니다.
이것도 방법중 하나가 될 수 있습니다. 하지만
2가지 걸리는 상황이 있을 수 있습니다.
var a : String? = null
a의 값이 변할 수는 있지만 절대 null이어서는 안되는 경우 -> 처음에 nullable한 <String?>으로 초기화해주는 것이 부적절함
a의 값이 처음 한 번만 청해지면 다시는 변하지 않는 경우 a가 var일 필요가 없습니다 .
이러한 걱정을 없애주는 문법이 lateinit과 by lazy입니다.
lateinit 문법은 다음과 같은 특징이 있습니다.
var 프로퍼티에서 사용가능
null을 허용하지 않음
get(),set() 사용이 불가능함
생성자에서 사용 불가능
lateinit var a : String
a = "lateinit"
println(a)
위와 같이 변수 앞에 lateinit 키워드를 붙이고 변수의 자료형을 명시해줍니다. lateinit은 mutable 변수에만 사용이 가능하기 때문에 var 타입의 변수에서만 사용이 가능합니다.
by lazy 문법은 다음과 같은 특징이 있습니다.
val 프로퍼티에서 사용 가능
get(), set() 사용이 불가능함
null을 허용함
생성자에서 사용 불가능
val a : String by lazy {"bylazy"}
println(a)
처음에는 val 형태의 a가 사용될 것이며 사용되는 첫 순간에 a 변수에 값이 들어가는 동작이 실행이 됩니다.
1, 처음 초기화 된 직후부터 계속 read-only로만 사용한다면 by lazy를 사용하고