JS 메모리제이션패턴

February 12, 2020

메모리제이션 패턴

'memorize'란 표현을 사전에서 찾아보면, '계산 결과를 저장해 놓아 이후 다시 계산할 필요 없이 사용할 수 있게 한다는 컴퓨터 용어라고 나와 았다. 메모이제이션 패턴은 바로 이러한 기능 자바스크립트에서 구현한 패턴이다. 기본적으로 계산된 결과를 함수 프로퍼티 값으로 담아 놓고 나중에 사용한다.

function Calculate(key, input, func) {
    Calculate.data = Calculate.data || {}
    if (!Calculate.data[key]) {
        var result
        result = func(input)
        Calculate.data[key] = result
    }

    return Calculate.data[key]
}

var result = Calculate(1, 5, function (input) {
    return input * input
})

console.log(result)

result = Calculate(2, 5, function (input) {
    return (input * input) / 4
})

console.log(result)

console.log(Calculate(1))
console.log(Calculate(2))

위 예제에서 보는 바와 같이 함수 Calculate() 프로퍼티에 data 프로퍼티를 만들어 객체를 할당하였다. 이곳에 사용자는 자신의 원하는 값을 원하는 키로 저장해 놓을 수 있다ㅣ 일단 한번 계산된 값이 들어가면 그 이후에는 해당 키로 저장해 놓은 값을 받아서 사용할 수 있다.

팩토리얼에 적용해보자

var fact = (function () {
    var cache = { 0: 1 }
    var func = function (n) {
        var result = 0

        if (typeof cache[n] === 'number') {
            result = cache[n]
        } else {
            result = cache[n] = n * func(n - 1)
        }

        return result
    }

    return func
})()

console.log(fact(10))
console.log(fact(20))

© 2023, Customized by Joon