[JS] Memoization 패턴

이애진·2022년 11월 28일
0

JavaScript

목록 보기
9/16
post-thumbnail

1. 메모이제이션 패턴

함수는 객체이기 때문에 property를 가질 수 있다.
예를 들어 각 함수는 어떤 문법으로 생성하든 자동으로 length 프로퍼티를 갖는다. 이 때 length는 함수가 받는 인자의 개수를 의미한다.

function foo(a, b) {
	// something
}

console.log(foo.length); // 2

언제든지 함수에 사용자 정의 프로퍼티를 추가할 수 있다. 함수에 프로퍼티를 추가해서 결과를 캐싱하여 사용할 수 있는데, 이런 활용 방법을 메모이제이션 패턴이라고 한다.

2. 예시 코드

어떤 정수의 제곱근을 구하는 방법을 메모이제이션 패턴으로 리팩토링 한다면 아래와 같다.

function sqrt(arg) {
  // sqrt 함수에 cache라는 프로퍼티가 없으면 빈 객체를 생성한다
  if (!sqrt.cache) {
    sqrt.cache = {};
  }
  
  // sqrt.cache에 arg 값이 없다면 (메모이제이션된 값이 없다면)
  if (!.sqrt.cache[arg]) {
  	return sqrt.cache[arg] = Math.sqrt(arg);
  }
  
  // sqrt.cache에 arg 값이 있다면 (메모이제이션된 값이 있다면)
  // 연산하지 않고 캐시 값을 바로 리턴한다
  return sqrt.cache[arg];
}

3. 정리

메모이제이션의 목표는 속도로 속도를 위해 저장공간(메모리)를 사용한다.
실행 시간이 줄어드는 장점이 있지만 메모리를 버리기 때문에 입력 범위가 제한된 함수에 사용해야한다.

ref

profile
Frontend Developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN