더북(TheBook)

이 프로그램을 실행하면 다음과 같은 출력을 볼 수 있다.

안녕1
안녕2
이름 계산 중...
Frank 현석 Oh
Frank 현석 Oh
Frank 현석 Oh
Frank 현석 Oh

가변 참조에 대해 지연 초기화를 사용할 수는 없지만, 가변 참조를 꼭 지연 초기화해야 한다면 lateinit 키워드를 사용할 수 있다. lateinit은 최초 사용 시 초기화되지는 않지만, 어떤 면에서는 by lazy와 같은 효과를 나타낸다.

lateinit var name: String
...
name = getName()

이런 식으로 구성하면 널이 될 수 있는 타입을 사용하지 않아도 된다. 하지만 프로퍼티를 다루고자 의존 관계 주입(DI, Dependency Injection) 프레임워크 등으로 외부에서 필드 초기화를 진행하는 경우를 제외하면 by lazy와 비교할 때 장점이 전혀 없다. DI를 하더라도 불변 프로퍼티를 사용할 수 있으므로 언제나 생성자 기반의 의존 관계 주입을 사용하려고 노력해야 한다. 지연 계산에 관한 자세한 내용은 9장에서 살펴보겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.