늦은 초기화 lateinit
프로퍼티를 선언하지 않고 초기화를 미루는 방법이다.
전역 변수로 선언 후 null값을 지정하지 않고 초기화 할 수 있다.
var를 이용한 경우에만 사용이 가능하다.
package eight_two_three
class User1 {
lateinit var lateData: String
}
fun main(args: Array<String>) {
// lateinit
val user = User1()
user.lateData = "hello"
println(user.lateData)
}
User1의 lateData를 선언할때 초기값을 설정하지 않았다.
이것을 후에 user.lateData = "Hello" 를 통해서 사용한다. 이런것이 늦은 초기화.
늦은 초기화 by lazy
lateinit과의 가장 큰 차이는 val의 경우에만 사용이 가능하다.
by lazy이후 블록 { } 을 생성하고 초기화에 필요한 코드를 작성한다.
즉 선언과 초기화가 동시에 진행이 된다.
private val mediaPlayer : MediaPlayer by lazy {
MediaPlayer.create(this,R.raw.hello)
}
그렇다면 왜 사용할까?
변수 선언 후 초기화시 null로 선언할 필요가 없을 때 사용한다.