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()