[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을 활용하여 메모이제이션을 구현하면 메모리 누수를 방지하고 효율적으로 메모이제이션을 수행할 수 있습니다.

참고문헌: