Published on

스터디 메모 '메모이제이션'

메모이제이션

(우선 설명 전에 피보나치 수열 간단 정리부터..)

첫째, 둘째 항이 1이며, 그 뒤로는 앞의 두 항의 합이 되는 수열.

순서0번째1번째2번째3번째4번째5번째6번째...
0111+1=21+2=32+3=53+5=8...

암튼 대충 이런 기반으로 정리하자면...

기본적으로

const 피보나치 = function(숫자) {
  return 숫자 < 2 ? 피보나치(숫자-1)+피보나치(숫자-2);
}

로 이루어진 재귀함수 인데, 중간에 함수를 계속 호출해야 하니...

const 피보나치 = (function () {
  let memo = [0, 1]
  const 내부함수 = function (숫자) {
    let 결과값 = memo[숫자]
    if (typeof 결과값 !== 'number') {
      // 뭐 이래두면 결과값은 number 아니면 undefined겠지 뭐..
      결과값 = 내부함수(숫자 - 1) + 내부함수(숫자 - 2)
      memo[숫자] = 결과값 // undefined 이면, memo에 추가.
    }
    return 결과값
  }
  return 내부함수
})()

뭐 대충 이렇게.. memo에 이전값을 추가로 저장해, 새로 호출할 때 다시 계산할 필요 없어지게 해주는 방법을 말한다.

리액트에서 React.memo 보면서 포스팅 남겨야겠다는 생각을 했다. 막상 쓰려니 말도 어렵고 설명이 어렵네 ;

나중에 고차 컴포넌트 (Higher Order Component)에 대해서도 한번 글 써서 엮어둬야겠다.