Javascript/자바스크립트 패턴
메모이제이션 패턴
dongling
2024. 7. 3. 21:51
728x90
반응형
SMALL
🔶 메모이제이션 (Memoization)
- 반복되는 결과를 메모리에 저장해놓고 다음에 같은 결과가 나올 때 다시 계산할 필요없이 빨리 실행 하는 기법
- 자바스크립트의 메모이제이션 컨셉은 두가지 개념으로 만들어짐
- 클로저(Closure)
- 고차함수(Hiher Order Functions)(함수에서 함수반환)
🔹 클로저
- 클로저는 함수의 해당 함수가 선언된 어휘 환경(lexical environment)의 결합이다.
function foo(a) { // 글로벌 스코프
var b = a + 2;
function bar(c) {
console.log(a, b, c);
}
bar(b * 2);
}
foo(3); // 3, 5, 10
- 예제를 보면 bar의 내용이 반복적으로 사용할때 유용하게 쓸 수 있음
🔹 함수에서 함수 반환
- 다른 함수에서 작동하는 함수를 인수로 사용하거나 반환하여 고차 함수(higher-order functions)라고 합니다.
- 클로적를 사용하면 둘러싼 함수의 어휘 범위 (즉, 둘러싼 함수의 함수의 식별자)에 대한 액세스를 유지하면서 둘러싸는 함수 외부에서 내부 함수를 호출 할 수 있다.
function foo(){
var a = 2;
function bar() {
console.log(a);
}
return bar;
}
var baz = foo();
baz();//2
✍️ 피보나치 수열
***보나치 수열은 1 또는 0으로 시작하고 그 다음에 1로 시작하는 숫자의 집합이며, 각 숫자(피보나치 수라고 함)가 앞의 두 숫자의 합과 같다는 규칙에 따라 계속됩니다
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 또는 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …***
- 재귀 솔루션
function fibonacci(n) {
if (n <= 1) {
return 1
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
- 메모이제이션 적용
function fibonacci(n,memo) {
memo = memo || {}
if (memo[n]) {
return memo[n]
}
if (n <= 1) {
return 1
}
return memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
}
728x90
반응형
LIST