memoization

sang hyeok Lee·2022년 4월 24일
0

memoization

메모이제이션이란 프로그래밍을 할 때 반복되는 결과를 메모리에 저장해서 다음에 같은 결과가 나올 때 빨리 실행하는 코딩 기법을 말한다.

const factorial = function(number) {
  if (number > 0) {
    return number * factorial(number - 1);
  } else {
    return 1;
  }
};
factorial(3); // 6
factorial(4); // 24

위 예제에서 보면 factorial(4)을 계산할 때 factorial(3)을 거칠 수 밖에 없다. 위에서 factorial(3)을 이미 계산을 하고 메모리에 저장이 되었는데 한번 더 계산을 하게 된다. 이렇게 되면 메모리와 시간이 더 들어간다. 프로그래밍에 있어서 시간과 메모리는 중요한 자원이다. 위 예제는 프로그래밍 입장에서 중요한 자원을 낭비하고 있는 것이다.

const factorial = (function() {
  const save = {};
  const fact = function(number) {
    if (number > 0) {
      const saved = save[number - 1] || fact(number - 1);
      const result = number * saved;
      save[number] = result;
      console.log(saved, result);
      return result;
    } else {
      return 1;
    }
  };
  return fact;
})();
factorial(7); // 1 1, 1 2, 2 6, 6 24, 24 120, 120 720, 720 5040
factorial(7); // 720 5040-

이렇게 클로저를 만든 후 factorial(7)을 두 번 연속 해봤다. 처음 호출 때는 처음 계산하는 것이기 때문에 계산이 여러 번 실행된다. console에 나오는 게 계산을 실행하는 과정이다. 두 번째 호출 때는 한 번 만에 실행 결과가 나온다. 이전에 했던 계산이 메모리에 저장되어있기 때문이다.

profile
개발자 되기

0개의 댓글