코틀린에서는 null을 허용하거나 초기화 해주는 방식으로 변수 선언시 무조건 초기화 해주어야하는데,
lateinit을 사용함으로써 초기화를 미룰 수 있다.
하지만 몇가지 제약이 존재한다.
fun main(args:Array<String>){
lateinit var a : String // 오류 X
lateinit val b : String // val로 선언 불가능하다. (수정해야 하기 때문에)
lateinit var c : String? // null 허용 타입에는 사용할 수 없다.
lateinit var d : Int // 기초 타입(Int) 에는 사용 할 수 없다.
}
또한 초기화되지 않은 변수를 참조하면 오류가 발생하므로
class MainActivity : AppCompatActivity() {
private lateinit var name : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(::name.isInitialized){
// 초기화 되었을때만 출력
println("저는 $name 입니다.")
}
}
}
isInitialized를 사용하여 초기화 되었는지 확인 할 수 있다.
또한 lazy를 사용할 수도 있다.
fun main(){
val a : String by lazy{
println("초기화 되었습니다.")
"초기화 상태"
}
println("1 : $a")
println("2 : $a")
println("3 : $a")
var b : String by lazy{
"b"
} // 오류 => var로 선언 불가능
}