Kotlin/포스팅

코틀린 늦은 초기화

짜집퍼박사(짜박) 2023. 12. 30. 21:09

코틀린에서 늦은 초기화(Late Initialization)는 일반적으로 프로퍼티를 선언할 때 초기값을 바로 할당하지 않고, 나중에 필요한 시점에서 값을 초기화하는 기술을 가리킵니다. 이는 프로퍼티를 선언할 때 즉시 값을 할당하지 않아도 되며, 나중에 초기화할 수 있는 유연성을 제공합니다.

 

늦은 초기화를 사용하는 프로퍼티 선언

class MyService {
    // 늦은 초기화를 사용하는 프로퍼티 선언
    lateinit var someProperty: String

    fun initialize() {
        // 나중에 필요한 시점에서 프로퍼티 초기화
        someProperty = "Initialized"
    }
}

위의 코드에서 someProperty는 lateinit 키워드를 사용하여 늦은 초기화를 허용하는 프로퍼티입니다. 이 프로퍼티는 초기값을 바로 할당하지 않고, initialize 메서드에서 필요한 시점에 초기화됩니다.

 

사용 시 주의사항

1. 초기화 전 사용 시 주의: 늦은 초기화된 프로퍼티를 사용하기 전에 반드시 초기화되었는지 검사해야 합니다. 초기화되지 않은 상태에서 사용하면 UninitializedPropertyAccessException이 발생합니다.

val service = MyService()
// 아래 코드에서 예외 발생: lateinit property someProperty has not been initialized
println(service.someProperty)

2. null이 아니라 초기화되지 않은 상태: lateinit을 사용하면 해당 프로퍼티는 null이 아닌 초기화되지 않은 상태로 간주됩니다. 따라서 lateinit 프로퍼티의 타입은 반드시 non-nullable이어야 합니다.
3. 초기화의 책임: 개발자가 초기화를 책임져야 합니다. 따라서 어떤 시점에 초기화되어야 하는지 명확히 알고 있어야 합니다.
4. 초기화 여부 확인: ::property.isInitialized를 사용하여 프로퍼티가 초기화되었는지 여부를 확인할 수 있습니다.

if (::someProperty.isInitialized) {
    // 초기화된 상태에서만 사용 가능한 코드
    println(someProperty)
}

 

늦은 초기화는 특히 의존성 주입이나 프레임워크에서 필요한 경우와 같이 객체의 초기화 시점이 명확하지 않은 상황에서 유용합니다. 하지만 초기화를 필요한 시점에서 확실히 수행해야 하며, 초기화 전에 사용하지 않도록 주의해야 합니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코틀린 지연 계산 프로퍼티와 위임  (0) 2023.12.30
코틀린 커스텀 접근자  (0) 2023.12.30
코틀린 최상위 프로퍼티  (0) 2023.12.30
코틀린 프로퍼티  (0) 2023.12.30
코틀린 엘비스 연산자  (0) 2023.12.30