서론

코틀린은 null을 매우 엄격하게 관리한다. 예를 들어 **?**로 변수를 선언할 때도 Nullable인지 아닌지를 구분 한다

하지만 **코드 상에서는 null**이 될 수도 있지만 실제 동작 중에는 null이 될 소지가 없는 경우가 존재

class TestActivity: Activity() {
    var name: String? = null
    override fun onCreate() {
        name = "abcd"
        print("${name?.length}")
    }
}

아래 코드처럼 전역 변수인데 실행과 동시에 초기화를 시키는 경우가 있다

**논리적으로 안전한 코드이지만 값에 접근할 때 안전 호출 연산자를 붙여야 하는 불편함**이 생긴다


lateinit

lateinit을 사용하면 변수의 값을 지정하는 작업을 뒤로 미룰 수 있음

Not Null인 변수를 선언하면서 값을 할당하는 작업을 미루고 싶을 때 lateinit 키워드를 사용하면 된다

class TestActivity: Activity() {
    lateinit var name: String
    override fun onCreate() {
        name = "abcd"
        print("${name.length}")
    }
}

아래 코드는 위와 다르게 non-unll로 선언해주었기 때문에 값에 접근할 때 ?.을 붙이지 않아도 된다

lateinit은 multable 변수만 가능하기 때문에 var 키워드를 가진 변수에서만 사용 가능

실행 중에 값을 변경해야 하는 경우 유용하다. 또한 값을 할당하지 않고 변수 값을 호출하면 언어 상 에러 발생


by lazy