⭐️ Memoization(메모이제이션) 패턴을 구현한 memo 함수
import { isFunction, isString } from "./typeOf.js";
import { throwTypeError } from "./throwError.js";
export const memo = (() => {
const cache = {};
return (memoized, key, showLog = false) => {
if (!isFunction(memoized)) {
throwTypeError("memoized 인자는 함수 유형이여야 합니다");
}
if (!isString(key)) {
throwTypeError("key 인자는 문자 유형이여야 합니다");
}
if (cache[key]) {
return cache[key];
} else {
showLog && console.log(`cached:${key}`);
return (cache[key] = memoized());
}
};
})();
이 함수는 Memoization(메모이제이션) 패턴을 구현한 memo 함수이며, memoized 함수의 결과를 캐시하여 동일한 인자가 입력될 경우 이전에 계산된 결과를 반환합니다. 이를 통해 중복 계산을 방지하고 실행 속도를 향상시키는 재사용 가능한 함수입니다.
showLog 옵션을 true로 설정하면 캐싱된 값을 로그로 출력할 수 있습니다.
🧐 Memoization(메모이제이션) 패턴이란?
Memoization(메모이제이션) 패턴은 중복되는 연산을 피하기 위해 이전에 계산된 결과를 저장하고 재사용하는 것을 의미합니다.
즉, 같은 인자를 가진 함수를 다시 호출할 때, 이전에 호출된 결과를 캐시하고, 새로운 연산을 하지 않고 저장된 값을 반환하여 중복 계산을 피합니다. 이 패턴은 복잡한 함수를 최적화하고, 실행 속도를 향상시키는 데에 유용합니다. 예를 들어, 자주 호출되는 함수가 많거나 실행 시간이 오래 걸리는 함수를 최적화할 때 사용할 수 있습니다. 이를 통해 매번 함수를 호출할 때마다 실행 시간을 절약하고, 애플리케이션의 성능을 개선할 수 있습니다.
'Javascript > 재사용 함수' 카테고리의 다른 글
loop & delay 유틸리티 함수 (0) | 2023.04.04 |
---|---|
throttle, debounce 유틸리티 함수 (0) | 2023.04.04 |
객체나 배열의 각 요소를 처리하는 유틸리티 함수 (0) | 2023.04.04 |
랜덤한 수를 생성하기 위한 유틸리티 함수 (0) | 2023.04.04 |
데이터 유형을 확인하기 위한 여러 가지 유틸리티 함수 (0) | 2023.04.04 |