더북(TheBook)

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()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.