코틀린은 null을 매우 엄격하게 관리한다. 예를 들어 **?
**로 변수를 선언할 때도 Nullable인지 아닌지를 구분 한다
하지만 **코드 상에서는 null
**이 될 수도 있지만 실제 동작 중에는 null이 될 소지가 없는 경우가 존재
class TestActivity: Activity() {
var name: String? = null
override fun onCreate() {
name = "abcd"
print("${name?.length}")
}
}
아래 코드처럼 전역 변수인데 실행과 동시에 초기화를 시키는 경우가 있다
**논리적으로 안전한 코드이지만 값에 접근할 때 안전 호출 연산자를 붙여야 하는 불편함
**이 생긴다
lateinit을 사용하면 변수의 값을 지정하는 작업을 뒤로 미룰 수 있음
Not Null인 변수를 선언하면서 값을 할당하는 작업을 미루고 싶을 때 lateinit 키워드를 사용하면 된다
class TestActivity: Activity() {
lateinit var name: String
override fun onCreate() {
name = "abcd"
print("${name.length}")
}
}
아래 코드는 위와 다르게 non-unll로 선언해주었기 때문에 값에 접근할 때 ?.을 붙이지 않아도 된다
lateinit은 multable 변수만 가능하기 때문에 var 키워드를 가진 변수에서만 사용 가능
실행 중에 값을 변경해야 하는 경우 유용하다. 또한 값을 할당하지 않고 변수 값을 호출하면 언어 상 에러 발생