메서드를 잘 살펴보면 구현하는 부분의 구조가 같은 것을 알 수 있습니다. 평균을 반환하는 get_average 메서드를 보면서 어떻게 캐시를 활용하는지 알아봅시다(#4). 우선 캐시 안에 average라는 키가 있는지 확인합니다(#5). 없다면 아직 평균이 구해지지 않은 상태이므로 클래스 멤버인 evaluator로 평균을 구하고 캐시에 저장합니다. average라는 키가 있다면 이미 연산 결과가 저장된 상태이므로 캐시에 저장된 값을 반환합니다(#6). 만약 객체를 생성한 다음 처음으로 표준편차를 반환하는 get_standard_deviation() 메서드를 호출한다면 if 문으로 키의 유무를 검사합니다. 키가 없다면 get_variance()와 get_average() 메서드 등을 차례대로 호출해 연산 결과를 차곡차곡 캐시에 쌓은 다음에 값을 반환할 것입니다. 즉, 필요한 시점에 필요한 연산만 하는 셈입니다.