[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개의 댓글