최대 1 분 소요

▶ 메모이제이션이란?

메모이제이션(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)을 호출하면 계산된 결과가 함수에 저장되어 있으므로 저장된 값을 사용한다.

댓글남기기