게터(Getter)란 무엇인가?
게터는 객체의 속성을 정의하는 방법 중 하나로, 속성의 값이 정의되는 시점에 계산되지 않는다는 특징이 있습니다. 대신 실제로 그 값에 접근하는 순간에 비로소 계산이 이루어집니다. 따라서 게터를 활용하면 값을 계산하는 비용을, 해당 값이 실제로 필요해질 때까지 효과적으로 지연시킬 수 있습니다.
스마트 게터와 메모이제이션(Memoization)
계산을 지연시키거나 '게으르게(lazy)' 처리하는 방식을 응용하면 소위 스마트 게터 또는 메모이즈드(memoized) 게터를 만들 수 있습니다. 이 방식에서는 한 번 계산된 값을 캐시(cache)에 저장해 두었다가, 나중에 다시 접근할 때 재활용합니다.
즉, 값은 게터가 처음 호출될 때 단 한 번만 계산됩니다. 이후의 접근에는 캐시된 값이 그대로 반환되므로, 동일한 값을 반복해서 다시 계산하는 낭비가 사라집니다. 계산 비용이 큰 연산이라면 성능 면에서 상당한 이점을 얻을 수 있습니다.
사용 시 주의사항
다만 값이 변경될 가능성이 있는 속성에는 지연 게터(lazy getter)를 사용해서는 안 됩니다. 앞서 설명했듯이 게터는 한 번 계산한 값을 캐시해 두기 때문에, 원본 값이 바뀌더라도 새로운 값을 다시 계산해 주지 않습니다. 그 결과, 이미 오래된(stale) 값이 계속 반환될 위험이 있습니다.