메모이제이션이란?
메모이제이션은 함수의 호출 결과를 캐싱하여, 동일한 아규먼트로 함수가 재호출될 때 저장해두었던 값을 리턴하는 방식입니다. 이는 자바스크립트 뿐만이 아닌, 여러 프로그램 언어에서도 흔하게 사용됩니다. 메모이제이션은 특별히 재귀 함수에서 유용하게 사용될 수 있습니다.
function factorial(num) {
if(num === 1) {
return 1;
}
return num * factorial(num - 1);
}
factorial(3)
factorial(3)
을 통해 factorial(3)
, factorial(2)
, factorial(1)
이 실행됩니다. 메모이제이션을 활용하면, 다음 번에 factorial(3)
실행 시 재귀 함수를 반복하지 않아도 됩니다. 또한 factorial(4)
를 실행하는 경우, 기존에 캐시된 factorial(3)
을 사용해 과정을 간소화할 수 있습니다.
메모이제이션의 활용
이제 memoize
함수를 통해 이를 구현해보도록 하겠습니다.
function memoize(fnc) {
let cache = {};
return function() {
let key = JSON.stringify(arguments);
if(cache[key]) {
return cache[key];
}
else {
let val = fnc.apply(this, arguments);
cache[key] = val;
return val;
}
};
}
여기에 factorial
함수를 통과시켜 다음과 같이 메모이제이션을 사용할 수 있습니다.
var factorial = memoize(function(num) {
console.log('Processing factorial ' + num);
if(num === 1) {
return 1;
}
return num * factorial(num - 1);
});
// 첫 번째 호출
console.log(factorial(3));
// -> working for factorial 3
// -> working for factorial 2
// -> working for factorial 1
// -> 6
// 두 번째 호출
console.log(factorial(3));
// -> 6
// factorial(4)
console.log(factorial(4));
// -> working for factorial 4
// -> 24
'개발 > JavaScript' 카테고리의 다른 글
자바스크립트 문자열로 함수를 실행하는 방법 (0) | 2020.11.20 |
---|---|
자바스크립트 arguments를 사용한 가변 인자 함수 활용 (0) | 2020.11.14 |
자바스크립트 클로저 설명, 예시, 활용 (0) | 2020.11.08 |