[JS] 메모이제이션
▶ 메모이제이션이란?
메모이제이션(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 함수 안에서 입력된 숫자 n이 존재하는지 확인하고, 존재하지 않으면 새로운 결과 값을 계산하여 저장한다.
- 즉, 배열에 값을저장해두고 다음수를 구할 때 메모리에서 찾아 리턴하는 방식으로 메모이제이션을 사용한 것이다.
-
factorial(6)를 호출할 때
factorial(6)
: 함수에 6의 결과 값이 없으므로 계산하고 저장한다.factorial(5)
: 함수에 5의 결과 값이 없으므로 계산하고 저장한다.factorial(4)
: 함수에 4의 결과 값이 없으므로 계산하고 저장한다.factorial(3)
: 함수에 3의 결과 값이 없으므로 계산하고 저장한다.factorial(2)
: 함수에 2의 결과 값이 없으므로 계산하고 저장한다.factorial(1)
: factorial[1]로 초기화 되어있다. -
다시 factorial(6)을 호출하면 계산된 결과가 함수에 저장되어 있으므로 저장된 값을 사용한다.
댓글남기기