Programing/Design Patterns

javascript Memoization Pattern, 메모이제이션 패턴

리커니 2021. 10. 28.
반응형

javascript Memoization Pattern, 메모이제이션 패턴

 

메모이제이션 패턴(Memoization Pattern) 이란 함수에 캐시할 property를 추가하고 결과를 이 property에 저장하여, 다음번 호출 시점에 같은 연산을 반복하지 않고 캐시된 값을 리턴하는 방법입니다.

 

이전에 계산한 값을 메모리에 올려놓고 다음번 같은 계산을 할때는 메모리에 있는 값을 리턴하는 방식이므로, 반복적이고 복잡한 연산일 수록 연산 속도를 빠르게 할 수 있습니다.

 

const func = function(param){
    if(!func.cache[param]){
    	let result = {};
    	//연산시간이 오래 걸리는 로직
        func.cache[param] = reuslt;
    }
    return func.cache[param];
}
func.cache = {};

 

예시 코드를 보시면 연산시간이 오래걸리는 func 함수가 있고, func함수에 cache property를 object로 추가했습니다.

func 함수는 cache된 값이 있으면 바로 캐시된 값을 리턴하고 없다면 연산시간이 오래 걸리는 로직을 거치게 되죠.

위의 코드는 단순히 하나의 기본형 데이터 타입을 파라메터로 받았을 때의 예시입니다.

복잡한 데이터 타입을 갖는다면 일반적으로 직렬화 하여 해결합니다.

 

const func = function(){
    const key = JSON.stringify(Array.prototype.slice.call(arguments));
    if(!func.cache[key]){
    	let result = {};
    	//연산시간이 오래 걸리는 로직
        func.cache[key] = reuslt;
    }
    return func.cache[key];
}
func.cache = {};

 

참고 : JavaScript Patterns - 스토얀 스테파노프

 

반응형

댓글

💲 추천 글