메모이제이션(Memoization)이란 말 그대로 메모를 하는 것이다.
프로그래밍에서 복잡한 함수의 결과를 메모리에 저장해두고, 나중에 같은 입력이 들어오면 저장된 결과를 사용하여 불필요한 계산 없이 프로그램을 더 빨리 실행할 수 있다.
아래의 코드는 메모이제이션을 활용한 코드이다.
어떤 순서로 실행되는지 분석해보자
function factorial(n) {
if (Number.isInteger(n) && n > 0) {
if (!(n in factorial)) {
factorial[n] = n * factorial(n - 1);
}
return factorial[n];
} else {
return "잘못된 숫자가 입력되었습니다.";
}
}
factorial[1] = 1; // 캐시를 초기화합니다.
console.log(factorial(6)); // => 720
console.log(factorial[5]); // => 120 / 이 값은 이미 캐시에 존재합니다.
factorial(6)를 호출할 때
factorial(6)
: 함수에 6의 결과 값이 없으므로 계산하고 저장한다.
factorial(5)
: 함수에 5의 결과 값이 없으므로 계산하고 저장한다.
factorial(4)
: 함수에 4의 결과 값이 없으므로 계산하고 저장한다.
factorial(3)
: 함수에 3의 결과 값이 없으므로 계산하고 저장한다.
factorial(2)
: 함수에 2의 결과 값이 없으므로 계산하고 저장한다.
factorial(1)
: factorial[1]로 초기화 되어있다.
다시 factorial(6)을 호출하면 계산된 결과가 함수에 저장되어 있으므로 저장된 값을 사용한다.