반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Medium
- 고득점Kit
- sql
- 동적계획법
- 파이썬
- VUE
- Doitvue.js입문
- 배열
- 리액트
- 리트코드
- typescript
- Level3
- dp
- javascript
- 웹프로그래밍
- 코테연습
- CS
- 자바스크립트
- OS
- 백준
- 카카오
- python
- web
- 프로그래머스
- Level1
- LeetCode
- 프로그래밍
- C++
- Level2
- react
Archives
- Today
- Total
[javascript] 메모제이션(memoization) 패턴 본문
반응형
// 본 내용은 '인사이드 자바스크립트' 책을 참고하였음
메모제이션 패턴은 계산결과를 저장해놓아 다시 계산할 필요 없이 사용할 수 있게 한 'memorize' 기능을 자바스크립트에서 구현한 패턴이다.
function Calculate(key,input,func){ Caculate.data = Calculate.data || {}; if(!Calculate.data[key]){ var result; result = func(input); Calculate.data[key] = result; } return Calculate.data[key]; }
함수 Caculate() 프로퍼티에 data 프로퍼티를 만들어 객체를 할당하였다. 사용자는 원하는 값을 원하는 키로 저장해 놓을 수 있다. 일종의 캐시 역할을 한다.
범용적으로 사용하기 위해서는 Function.prototype에 함수를 추가한다.
Function.prototype.memoization = function(key){ var arg = Array.prototype.slice.call(arguments,1); this.data = this.data || {}; return this.data[key] !== undefined? this.data[key] : this.data[key] = this.apply(this.arg); }; function cal(input){ return input + input; } cal.memoization(1,5); //index 번호, 계산할 인자 console.log(cal.memoization(1)); // equals cal.data[1]
Function.prototype에 메서드를 정의해놓으면 한번 값이 들어간 경우 계속 유지되므로 이를 초기화하는 방법도 제공 되어야한다.
이런 패턴은 연산 함수를 사용할 때 보다 나은 성능의 함수를 구현할 수 있다.
//초기 캐시값과 사용자 정의 함수를 받음 var cacher = function(cache,func){ var calculate = function(n){ if(typeof(cache[n]) === 'number'){ result = cache[n]; }else{ result = cache[n] = func(calculate,n); } return result; } return calculate; }; //피보나치수열 var fibo = cacher({'0':0,'1':1},function(func,n){ return func(n-1)+func(n-2); }); //팩토리얼 var fact = cacher({'0':1},function(func,n){ return n*func(n-1); }); console.log(fibo(10)); console.log(fact(10));
반응형
'Web > Javascript' 카테고리의 다른 글
디바운스와 쓰로틀 (0) | 2022.05.26 |
---|---|
[함수형프로그래밍] reduce 함수 (0) | 2016.10.31 |
Comments