Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Kotlin lateinit 변수 초기화 여부 확인하는 방법 총정리

Kotlin lateinit 변수란?

선언된 이후에 나중에 초기화되는 변수를 '지연 초기화 변수(late-initialized variable)'라고 부릅니다. 일반적인 프로그래밍 언어에서는 널이 아닌(non-null) 타입의 변수를 생성자에서 반드시 초기화해야 하지만, 개발자가 실수로 널 검사를 누락하면 프로그램 오류로 이어질 수 있습니다. 이러한 문제를 방지하기 위해 Kotlin은 lateinit이라는 수정자(modifier)를 도입했으며, 해당 변수가 초기화되었는지 확인할 수 있는 방법도 함께 제공합니다.

lateinit 사용 조건

lateinit 변수를 선언하려면 변수 앞에 lateinit 키워드만 붙이면 됩니다. 다만 Kotlin에서 lateinit을 사용하려면 다음 조건들을 충족해야 합니다.

  • 가변 변수(mutable variable)에만 사용 가능 — lateinit은 반드시 var 키워드와 함께 사용해야 합니다.
  • 널이 아닌(non-nullable) 타입에만 허용 — nullable 타입에는 적용할 수 없습니다.
  • 기본형(primitive) 데이터 타입에는 동작하지 않음 — Int, Boolean 등의 기본형에는 사용할 수 없습니다.
  • getter와 setter가 없는 프로퍼티여야 함 — 커스텀 getter나 setter가 정의된 프로퍼티에는 적용할 수 없습니다.

예제: isInitialized로 초기화 여부 확인하기

아래 예제에서는 변수를 lateinit으로 선언하고, Kotlin 라이브러리에서 제공하는 this::name.isInitialized 구문을 사용해 변수가 초기화되었는지 확인합니다.

class Tutorial {

    lateinit var name : String

    fun checkLateInit(){
        println(this::name.isInitialized)
        // 값이 아직 초기화되지 않았으므로 false 출력

        // name 초기화
        name = "www.tutorialspoint.com/"
        println(this::name.isInitialized)
        // true 반환
    }
}

fun main() {
    var obj = Tutorial()
    obj.checkLateInit()
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

false
true

첫 번째 출력에서는 name 변수가 아직 초기화되지 않았기 때문에 false가 반환됩니다. 반면 두 번째 출력에서는 변수가 이미 초기화된 상태이므로 true가 반환됩니다.

이처럼 isInitialized를 활용하면 lateinit 변수에 접근하기 전에 초기화 상태를 미리 검사할 수 있어, 초기화되지 않은 변수에 접근할 때 발생하는 UninitializedPropertyAccessException과 같은 런타임 예외를 효과적으로 예방할 수 있습니다.