[typescript] 타입스크립트의 메모이제이션 최적화 방법
메모이제이션이란 이전에 계산한 값을 저장해 둠으로써 동일한 계산을 반복하지 않도록 하는 최적화 기법입니다. 타입스크립트에서 메모이제이션을 구현하면 함수의 성능을 향상시킬 수 있습니다. 이번 포스트에서는 타입스크립트에서 메모이제이션을 구현하고 최적화하는 방법에 대해 알아보겠습니다.
메모이제이션의 기본 구현
가장 간단한 형태의 메모이제이션은 함수 내부에 캐시를 저장하는 방식입니다. 다음은 기본적인 형태의 메모이제이션을 구현한 예제입니다.
function memoizedFunction(input: number): number {
if (!memoizedFunction.cache) {
memoizedFunction.cache = new Map<number, number>();
}
if (memoizedFunction.cache.has(input)) {
return memoizedFunction.cache.get(input)!;
}
const result = /* 계산 수행 */;
memoizedFunction.cache.set(input, result);
return result;
}
memoizedFunction.cache = new Map<number, number>();
위 예제에서 memoizedFunction
은 입력값과 그에 해당하는 결과값을 캐싱하는 기본적인 메모이제이션 함수입니다. 하지만 이 구현은 여러 점에서 개선이 필요합니다.
최적화를 위한 WeakMap 활용
ES6에서 추가된 WeakMap을 사용하면 메모이제이션을 더욱 효율적으로 구현할 수 있습니다. WeakMap은 키에 대한 강력한 참조가 없을 경우 자동으로 메모리에서 해당 항목을 제거하기 때문에 메모리 누수의 위험을 감소시켜줍니다. 아래는 WeakMap을 활용한 메모이제이션 구현 예제입니다.
const memoizedFunction = (function () {
const cache = new WeakMap<object, number>();
return (input: number): number => {
if (cache.has(input)) {
return cache.get(input)!;
}
const result = /* 계산 수행 */;
cache.set(input, result);
return result;
};
})();
요약
이번 포스트에서는 타입스크립트에서의 메모이제이션을 구현하고 최적화하는 방법에 대해 알아보았습니다. 메모이제이션을 사용하면 함수의 성능을 향상시킬 수 있지만, 적절한 캐시 전략을 사용하는 것이 중요합니다. WeakMap을 활용하여 메모이제이션을 구현하면 메모리 누수를 방지하고 효율적으로 메모이제이션을 수행할 수 있습니다.
참고문헌: