Skip to content

memoize (Lodash 호환성)

es-toolkitmemoize를 사용하세요

memoize 함수는 resolver 함수의 null 체크, MapCache 인터페이스의 복잡한 타입 처리, 그리고 Lodash 호환성을 위한 추가적인 오버헤드로 인해 느리게 동작해요.

대신 더 빠르고 현대적인 es-toolkitmemoize를 사용하세요.

함수의 결과를 캐시하여 동일한 인수로 호출할 때 성능을 향상시켜요.

typescript
const memoizedFunc = memoize(func, resolver);

레퍼런스

memoize(func, resolver)

함수의 결과를 메모이제이션하여 동일한 인수로 호출할 때 이전 결과를 재사용하고 싶을 때 memoize를 사용하세요. 비용이 많이 드는 계산이나 API 호출에 유용해요.

typescript
import { memoize } from 'es-toolkit/compat';

// 기본 사용법
function expensiveCalculation(n) {
  console.log('계산 중...', n);
  return n * n;
}

const memoizedCalc = memoize(expensiveCalculation);

console.log(memoizedCalc(5)); // '계산 중... 5', 25
console.log(memoizedCalc(5)); // 25 (캐시된 결과, 계산하지 않음)
console.log(memoizedCalc(10)); // '계산 중... 10', 100

// 커스텀 리졸버 사용
function fetchUserData(userId, includeProfile) {
  console.log('사용자 데이터 가져오는 중...', userId, includeProfile);
  return { id: userId, profile: includeProfile ? '프로필 데이터' : null };
}

// 모든 인수를 고려한 캐시 키 생성
const memoizedFetch = memoize(fetchUserData, (userId, includeProfile) => {
  return `${userId}_${includeProfile}`;
});

memoizedFetch(1, true); // '사용자 데이터 가져오는 중... 1 true'
memoizedFetch(1, true); // 캐시된 결과 사용
memoizedFetch(1, false); // '사용자 데이터 가져오는 중... 1 false' (다른 캐시 키)

// 캐시 접근 및 수정
console.log(memoizedCalc.cache.get(5)); // 25
memoizedCalc.cache.set(7, 49); // 수동으로 캐시 설정
console.log(memoizedCalc(7)); // 49 (계산하지 않고 캐시된 값 사용)

대부분의 경우 기본 해시 맵을 사용하지만, 필요에 따라 커스텀 캐시 구현체를 사용할 수도 있어요.

파라미터

  • func (Function): 메모이제이션할 함수예요.
  • resolver (Function, 선택): 캐시 키를 결정하는 함수예요. 제공되지 않으면 첫 번째 인수를 키로 사용해요.

반환 값

(Function & { cache: MapCache }): 메모이제이션된 함수를 반환해요. 반환된 함수에는 cache 프로퍼티가 있어서 캐시에 직접 접근할 수 있어요.

MIT 라이선스에 따라 배포됩니다.