본문 바로가기

메모이제이션 - 자바스크립트

D-caffein 발행일 : 2023-03-27
반응형

메모이제이션(Memoization)은 계산 결과를 저장하여 재활용하는 기법입니다. 함수의 실행 결과를 저장하는 캐시(Cache)를 활용하여, 이전에 계산한 결과를 저장하고 동일한 입력값이 들어올 때는 캐시된 결과를 반환함으로써 함수의 실행 속도를 높일 수 있습니다.

메모이제이션은 주로 재귀 함수에서 사용되며, 피보나치 수열과 같이 중복 계산이 발생하는 함수에서 특히 유용합니다. 예를 들어, 피보나치 수열의 10번째 항을 구하는 경우, 이전 항들의 값을 계산하는 과정에서 중복 계산이 발생합니다. 이때, 메모이제이션을 사용하여 이미 계산된 항들의 결과를 저장하고 재활용함으로써 중복 계산을 피할 수 있습니다.

자바스크립트에서는 객체를 활용하여 메모이제이션을 구현할 수 있습니다. 함수 내부에서 객체를 선언하고, 입력값을 키(key)로 하여 계산 결과를 값(value)으로 저장합니다. 이후 함수를 호출할 때마다 객체에서 입력값에 해당하는 결과값을 검색하여, 이미 계산된 결과가 있다면 그 값을 반환합니다.

function fibonacci(n, memo) {
  memo = memo || {};

  if (memo[n]) {
    return memo[n];
  }

  if (n <= 1) {
    return n;
  }

  return memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
}

입력값 n 에 해당하는 피보나치 수를 반환합니다. 함수 내부에서 객체 memo 를 선언하고, 입력값 n 을 키로 하는 결과값을 값으로 저장합니다. 만약 입력값 n 에 해당하는 결과값이 이미 memo 객체에 저장되어 있다면, 그 값을 반환하고 중복 계산을 피합니다.

메모이제이션을 사용함으로써 함수의 실행 속도를 향상시킬 수 있습니다. 다만, 적절한 캐시 크기와 캐시의 만료 전략 등을 고려하여 구현해야 합니다.

👉 재귀함수로 피보나치 수열 구하기

반응형

'Programming > Java Script' 카테고리의 다른 글

findIndex - 자바스크립트  (0) 2023.04.11
find - 자바스크립트  (0) 2023.04.10
concat - 자바스크립트  (0) 2023.03.24
reduce - 자바스크립트  (0) 2023.03.22
map - 자바스크립트  (0) 2023.03.21

댓글