본문 바로가기
Android/Kotlin

[Kotlin] Kotlin에서의 지연 초기화: lateinit 키워드 이해하기

by quessr 2024. 4. 30.

 

lateinit는 Kotlin에서 나중에 초기화될 프로퍼티를 선언하기 위해 사용되는 키워드입니다. 코틀린은 널 안정성(null safety)을 중요시하는 언어이기 때문에, 프로퍼티를 선언할 때 반드시 초기화를 해주거나 null 가능 타입으로 선언해야 합니다. 그러나, 어떤 경우에는 클래스의 초기화 과정 중에 바로 프로퍼티 값을 결정하기 어렵거나, 의존성 주입 등으로 인해 객체 생성 이후에 초기화가 이루어져야 할 경우가 있습니다. 이런 경우에 lateinit 키워드를 사용하면 초기화를 지연시킬 수 있습니다.

 

lateinit의 주요 특징:

  • 초기화 지연: lateinit 키워드를 사용하면 선언 시점에서 바로 초기화하지 않고, 나중에 초기화할 수 있습니다.
  • 널이 아닌 타입 사용 가능: lateinit으로 선언된 프로퍼티는 널이 아닌 타입으로 선언할 수 있습니다. 따라서 널 체크 없이 해당 프로퍼티를 안전하게 사용할 수 있습니다.
  • 변수(var)에만 사용: lateinit은 오직 mutable한 변수인 var에만 사용할 수 있습니다. 불변인 val에는 사용할 수 없습니다.
  • 기본 타입에는 사용 불가: Int, Float 같은 기본 타입에는 lateinit을 사용할 수 없습니다. 참조 타입에만 사용할 수 있습니다.
  • 초기화 여부 확인: ::프로퍼티명.isInitialized를 통해 lateinit 프로퍼티가 초기화되었는지 확인할 수 있습니다. (코틀린 1.2 이상에서 지원)

사용 예제

class MyTestClass {
    lateinit var myProperty: String

    fun initialize() {
        myProperty = "Hello"
    }
}

 

예제에서 MyTestClass lateinit으로 선언된 myProperty 포함하고 있습니다. 프로퍼티는 initialize 함수 호출을 통해 나중에 초기화될 있습니다. 이렇게 lateinit 사용하면 클래스의 유연한 설계가 가능해지며, 특히 프레임워크나 라이브러리와의 연동에서 유용하게 사용될 있습니다.