**메모이제이션(Memoization)**은 컴퓨터 프로그램의 성능을 향상시키기 위한 최적화 기법입니다. 이는 이미 계산된 결과를 저장(메모)하고 재사용하여 동일한 계산을 반복하지 않도록 합니다. 메모이제이션은 주로 고비용의 계산과 상호 작용하는 컴퓨터 알고리즘을 개선하는 데 사용됩니다.
메모이제이션의 장점:
시간 복잡도 감소: 결과를 저장하여 계산 시간을 줄임.코드의 간결성과 가독성 향상: 적절한 메모이제이션 기법을 사용함으로써 함수 구현이 간결해질 수 있음.
메모이제이션의 단점:
메모리 사용량 증가: 결과를 저장하는 데 메모리 공간이 필요하므로, 메모리 사용량에 영향을 줌.어떤 애플리케이션에서는 메모이제이션의 실제 성능 향상이 미비할 수도 있음. 이는 애플리케이션의 특성과 입력 데이터의 분포에 따라 다를 수 있음.
function factorial(n) {
if (Number.isInteger(n) && n > 0) {
if (!(n in factorial)) {
factorial[n] = n * factorial(n - 1);
}
return factorial[n];
} else {
return '잘못된 숫자가 입력되었습니다.';
}
}
factorial[1] = 1; // 캐시를 초기화합니다.
factorial(6); // => 720
factorial[5]; // => 120 / 이 값은 이미 캐시에 존재합니다.
factorial(n)
함수를 정의합니다. 매개변수 n
은 팩토리얼을 구할 정수입니다.if (Number.isInteger(n) && n > 0)
조건문을 사용해 입력받은 n
이 양의 정수인지 확인합니다.n
이 양의 정수인 경우, 이전에 계산되어 캐시에 저장되었는지 확인합니다. 만약 캐시에 저장된 값이 없다면 (!(n in factorial)
), 팩토리얼 함수를 재귀적으로 호출하여 n
의 팩토리얼 값을 계산하고, 캐시에 저장합니다(factorial[n] = n * factorial(n - 1)
).factorial[n]
을 반환하여 팩토리얼 값을 반환합니다. 캐시에 이미 해당 값이 저장되어 있다면, 저장된 값을 바로 반환하여 재사용합니다. 이를 통해 성능이 개선됩니다.n
이 양의 정수가 아닐 경우, '잘못된 숫자가 입력되었습니다.'
를 반환합니다.factorial[1] = 1;
코드를 사용해 캐시를 초기화하고, 1
의 팩토리얼 값을 캐시에 저장합니다. 이는 팩토리얼 함수의 기본 케이스이므로 첫 번째 값으로 캐시에 저장해둡니다.예시 코드 실행:
factorial(6);
을 호출하여 팩토리얼 값을 구합니다. 이는 6 * 5 * 4 * 3 * 2 * 1 = 720
이며, 계산된 팩토리얼 값이 캐시에 저장됩니다.factorial[5];
를 조회하여 저장된 값을 확인할 수 있습니다. 이미 캐시에 저장된 값인 5 * 4 * 3 * 2 * 1 = 120
이 반환됩니다. 팩토리얼 함수를 다시 호출할 필요 없이 저장된 값을 사용할 수 있습니다.