class Person { late int age = calculation(); void printAge() { print('age'); } } int calculation() { print('calculate'); return 30; } void main() { Person p = Person(); p.printAge(); print(p.age); }
다음 소스코드의 출력결과는 다음과 같다.
age calculate 30
late 키워드과 붙은 변수는 곧바로 값이 할당되지 않고 변수가 참조될 때 할당을 시작한다.
때문에 Person() 객체가 생성될 때는 calculation()이 실행되지 않다가.
printAge() 함수가 실행되어서 age가 출력되고,
p.age를 출력하려고 하는 순간 calculation()이 실행되서 calculate가 출력된다.
그리고 30이 age에 할당되고 30이 출력된다.
다음과 같이 late 키워드를 사용해서 곧바로 값이 할당되지 않고, 변수가 참조될 때 값이 할당되는 마치
게으르고 느리게 initialize 하는 것을 lazy initialization이라고 부른다.