- Published on
스터디 메모 '메모이제이션'
메모이제이션
(우선 설명 전에 피보나치 수열 간단 정리부터..)
첫째, 둘째 항이 1이며, 그 뒤로는 앞의 두 항의 합이 되는 수열.
순서 | 0번째 | 1번째 | 2번째 | 3번째 | 4번째 | 5번째 | 6번째 | ... |
---|---|---|---|---|---|---|---|---|
항 | 0 | 1 | 1 | 1+1=2 | 1+2=3 | 2+3=5 | 3+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)에 대해서도 한번 글 써서 엮어둬야겠다.