자바스크립트 메모이제이션 설명

2020. 11. 17. 23:20·개발/JavaScript

메모이제이션이란?

메모이제이션은 함수의 호출 결과를 캐싱하여, 동일한 아규먼트로 함수가 재호출될 때 저장해두었던 값을 리턴하는 방식입니다. 이는 자바스크립트 뿐만이 아닌, 여러 프로그램 언어에서도 흔하게 사용됩니다. 메모이제이션은 특별히 재귀 함수에서 유용하게 사용될 수 있습니다.

function factorial(num) {
    if(num === 1) {
        return 1;
    }
    return num * factorial(num - 1);
}

factorial(3)

factorial(3)을 통해 factorial(3), factorial(2), factorial(1)이 실행됩니다. 메모이제이션을 활용하면, 다음 번에 factorial(3) 실행 시 재귀 함수를 반복하지 않아도 됩니다. 또한 factorial(4)를 실행하는 경우, 기존에 캐시된 factorial(3)을 사용해 과정을 간소화할 수 있습니다.

메모이제이션의 활용

이제 memoize 함수를 통해 이를 구현해보도록 하겠습니다.

function memoize(fnc) {
    let cache = {};
    return function() {
        let key = JSON.stringify(arguments);
        if(cache[key]) {
            return cache[key];
        }
        else {
            let val = fnc.apply(this, arguments);
            cache[key] = val;
            return val;
        }
    };
}

여기에 factorial 함수를 통과시켜 다음과 같이 메모이제이션을 사용할 수 있습니다.

var factorial = memoize(function(num) {
    console.log('Processing factorial ' + num);
    if(num === 1) {
        return 1;
    }
    return num * factorial(num - 1);
});

// 첫 번째 호출
console.log(factorial(3));
// -> working for factorial 3
// -> working for factorial 2
// -> working for factorial 1
// -> 6

// 두 번째 호출
console.log(factorial(3));
// -> 6

// factorial(4)
console.log(factorial(4));
// -> working for factorial 4
// -> 24

참고: Javascript Function Meomoization

'개발 > JavaScript' 카테고리의 다른 글

자바스크립트 문자열로 함수를 실행하는 방법  (0) 2020.11.20
자바스크립트 arguments를 사용한 가변 인자 함수 활용  (0) 2020.11.14
자바스크립트 클로저 설명, 예시, 활용  (0) 2020.11.08
'개발/JavaScript' 카테고리의 다른 글
  • 자바스크립트 sort() 메소드 사용 방법 정리
  • 자바스크립트 문자열로 함수를 실행하는 방법
  • 자바스크립트 arguments를 사용한 가변 인자 함수 활용
  • 자바스크립트 클로저 설명, 예시, 활용
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발 N
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git N
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
자바스크립트 메모이제이션 설명
상단으로

티스토리툴바