4.3.4 지연 계산 프로퍼티와 위임

    앞 절에서는 lateinit 변경자를 사용해 지연 초기화를 구현하는 방법을 살펴봤다. 하지만 어떤 프로퍼티를 처음 읽을 때까지 그 값에 대한 계산을 미뤄두고 싶을 때가 자주 있다. 코틀린에서는 lazy 프로퍼티를 통해 이를 달성할 수 있다. 예를 살펴보자.

    import java.io.File
    
    val text by lazy {
      File("data.txt").readText()
    }
    
    fun main() {
      while (true) {
        when (val command = readLine() ?: return) {
          "print data" ->println(text)
          "exit" -> return
        }
      }
    }

    앞 예제에서는 text 프로퍼티를 lazy로 정의했다. lazy 다음에 오는 블록 안에는 프로퍼티를 초기화하는 코드를 지정한다. main() 함수에서 사용자가 적절한 명령으로 프로퍼티 값을 읽기 전까지, 프로그램은 lazy 프로퍼티의 값을 계산하지 않는다. 초기화가 된 이후 프로퍼티의 값은 필드에 저장되고, 그 이후로는 프로퍼티 값을 읽을 때마다 저장된 값을 읽게 된다. 예를 들어 간단한 초기화를 통해 다음과 같이 프로퍼티를 정의한 경우에는

    val text = File("data.txt").readText()
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.