메모이제이션이란?
- 메모이제이션은 프로그래밍 기법 중에 하나입니다.
- 이 기법을 캐시라고 부르는 사람들도 있습니다.
- 한 번 연산한 값을 메모리에 기억해두었다가 값이 필요할 때 연산을 다시 반복하지 않고 메모리에서 이미 연산된 값을 다시 꺼내쓰는 기법입니다.
- 만일 함수의 결과가 외부 요인에 영향을 받지 않는다면, 메모이제이션 기법을 적용할 수 있는 좋은 대상이 됩니다.
- 인자별 결과 값을 메모리에 저장해두면 나중에 같은 인자로 함수가 호출되었을 때 연산을 하지 않고 메모리에서 바로 값을 제공할 수 있습니다.
- 이렇게 함수의 결과 값을 메모리에서 가져오면, 비싼 컴퓨팅 자원을 아끼게 해주고 함수 실행 결과도 매우 빨리 나오게 됩니다.
- 주로 재귀 함수나 동적 프로그래밍에 이 기법이 많이 이용됩니다.
- 웹에서는 만일 매 요청시마다 같은 페이지를 보여주게 되어있다면, 네트워크 통신 비용과 쿼리 실행 비용이 들어가는 데이터베이스의 값을 캐시 저장소(주로 레디스)에 저장해두는 식으로 메모이제이션 기법(캐싱)을 많이 이용합니다.
- 이를테면 검색 사이트에서는 사람들이 자주 검색하는 검색어에 대해 캐싱을 적용할 수 있을 것입니다.
예제 코드
const memoizAddition = () => {
const cache = {}; // 캐시 저장소
return (value) => {
if (value in cache) {
console.log("캐시에서 가져옴");
return cache[value];
} else {
console.log("계산 후 캐시에 저장");
const result = value + 20;
cache[value] = result;
return result;
}
};
};
const addition = memoizAddition();
console.log(addition(20)); // 계산 후 캐시에 저장, 40
console.log(addition(20)); // 캐시에서 가져옴, 40
console.log(addition(3050)); // 계산 후 캐시에 저장, 3070
console.log(addition(3050)); // 캐시에서 가져옴, 3070
반응형
'자바스크립트 > 인터뷰' 카테고리의 다른 글
클로저 (Closure) 란 무엇인지 설명해주세요. (0) | 2023.02.08 |
---|---|
호이스팅이란 무엇인가요? (0) | 2023.01.26 |
자바스크립트에서 URL 을 인코드하거나 디코드하는 방법에 대해서 알고 있나요? (0) | 2023.01.26 |
자바스크립트의 TDZ (Temporal Dead Zone) 에 대해서 간단히 설명해주실 수 있나요? (0) | 2023.01.18 |
switch 문에서 에러 없이 let 으로 변수를 재선언해보세요. (0) | 2023.01.18 |