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
   16   17   18   19   20   21   22   23