본문 바로가기
Kotlin

[Kotlin] Late-initialized properties and variables

by gungle 2023. 6. 23.

코틀린은 자바와 같이 객체 지향 프로그래밍 언어이며, 다양한 편의 기능을 제공한다. 그 중 하나인 Late-initialized 속성과 변수는 프로그래밍 시 유용한 기능이다.

 

1. Late-initialized 속성과 변수의 개념

  • Early-initialized vs. Late-initialized: Early-initialized 속성은 변수를 선언하는 동시에 값을 할당하는 반면, Late-initialized 속성은 선언 시 초기값을 주지 않고, 나중에 값을 할당하는 방식
  • 사용 이점: Late-initialized 속성과 변수는 객체를 초기화할 때 유용
  • 예를 들어, 객체 생성 시 필요한 정보가 늦게 도착하는 경우나, 초기화에 시간이 걸리는 경우에 사용할 수 있음

 

2. Late-initialized 속성의 사용 방법

  • lateinit 키워드: lateinit 키워드를 사용하여 Late-initialized 속성을 선언
  • 초기화 시점: lateinit 속성은 선언 이후에 어느 시점에서든 값이 할당되어야 함
  • 그렇지 않을 경우, lateinit 속성에 접근하면 예외가 발생

 

3. Late-initialized 변수의 사용 방법

  • Late-initialized 변수: 변수에도 lateinit 키워드를 사용하여 Late-initialized 변수를 선언할 수 있음
  • 초기화 시점: 변수는 선언 이후 언제든지 값을 할당할 수 있으며, lateinit 속성과는 달리 예외가 발생하지 않음

 

4. 주의사항과 사용 시 고려할 점

  • lateinit 속성과 변수는 널 값을 허용하지 않음
  • 초기화되지 않은 lateinit 속성이나 변수에 접근하면 예외가 발생
  • lateinit 속성과 변수는 프리미티브 타입에 사용할 수 없음
  • 가능한 한 lateinit 속성과 변수의 사용을 최소화하고, 초기화 여부를 검사하는 방법을 고려해야 함

 

5. 예제 코드

  • 객체의 Late-initialized 속성과 변수를 사용하는 예제 코드는 다음과 같다.
class ExampleClass {
    lateinit var lateInitProperty: String
    lateinit var lateInitVariable: String

    fun initialize() {
        // 객체 초기화를 위해 값을 할당
        lateInitProperty = "Initialized property"
        lateInitVariable = "Initialized variable"
    }

    fun printValues() {
        // 초기화된 속성과 변수의 값을 출력
        println("Late-initialized property: $lateInitProperty")
        println("Late-initialized variable: $lateInitVariable")
    }
}

fun main() {
    val example = ExampleClass()
    example.initialize() // 속성과 변수를 초기화
    example.printValues() // 값을 출력
}

위의 코드에서 ExampleClass는 lateInitProperty와 lateInitVariable이라는 Late-initialized 속성과 변수를 가지고 있다. initialize 메서드를 통해 객체의 속성과 변수를 초기화하고, printValues 메서드에서 초기화된 값을 출력한다.

 

결론
코틀린의 Late-initialized 속성과 변수는 객체 초기화에 유용한 기능이다. 초기값을 미리 지정하지 않고, 나중에 값을 할당할 수 있는 편의성을 제공한다. 하지만 사용할 때에는 주의사항을 지켜야 하며, 초기화되지 않은 경우 예외가 발생할 수 있다. 애플리케이션에서 적절하게 사용하고, 코드를 깔끔하게 유지하기 위해 초기화 여부를 검사하는 방법도 고려해야 한다.