Page 21 - 006963
P. 21
두 가지 코드 모두 성능에 영향을 미치지만 여기서는 다루지 않을 것이며, 이 중 어느 하나가 가장 좋은 타입이라고 할
수도 없습니다. 단지 재귀 함수에 필요한 몇 가지 사항을 설명하는 정도라고 보면 됩니다.
구현한 코드를 살펴보자면, 첫 번째로 선언 내부에 있는 함수를 호출해야 하고(find는 자기 자신에서 find()를 호출
합니다), 두 번째는 함수 자신을 호출하지 않는 ‘기반 사례(탈출 조건)’ 코드 경로가 있어야 합니다(보통 앞에서 조건 절
로 설명했습니다). 이 예제에서는 ‘found’ 또는 ‘not found’를 반환하는 두 가지 종료 분기가 있습니다. 기반 사례(또
는 시간 제한)가 없다면 무한 반복으로 실행이 종료될 것입니다.
자, 그러면 조건적 투명성을 모두가 좋아하는 재귀 함수, factorial로 살펴봅시다(예제 파일:
factorial.js).
function factorial(number){
if(number < 2){ 11
return 1;
}else{ 함수형 프로그래밍
return(number * factorial(number - 1));
}
};
factorial(3); // 6 반환
모든 것이 좋지만, 순수 함수(출력 값은 입력 값에 달려 있는 함수)가 있기 때문에 연산을 반복
하지 않고 나중에 검색할 수 있도록 저장할 수 있는 기회(메모이제이션)가 있습니다(예제 파일:
factorial-1.js).
const lookupTable = {};
function memoizedFactorial(number){
if(number in lookupTable){
console.log("cached");
return lookupTable[number];
}else{
console.log("calculating");
var reduceValue;
if(number < 2){
reduceValue = 1;
}else{
reduceValue = number * memoizedFactorial(number - 1);
}
lookupTable[number] = reduceValue;
return reduceValue;
}
429
리팩토링 자바스크립트(본문)최종.indd 429 2018-09-19 오전 1:31:34