Page 20 - 006963
P. 20

하면 같은 결과를 얻게 됩니다. 이때 누가 먼저 완료하든 상관없습니다. 즉, 경쟁 조건을 피할 수

                   있습니다.
                   또 같은 인수를 사용하여 함수를 호출할 때 항상 같은 함수를 반환하면 함수는 참조적으로 투명하
                       2
                   므로  생산된 값으로 함수의 표현 평가를 대신할 수 있습니다. 이에 따르면 함수는 두 번 연속으
                   로 평가할 필요가 없습니다(설정에 조금만 신경 쓴다면).


                     Note   재귀
                     여기까지 책을 읽은 독자라면 재귀에 익숙하거나 완전히 이해할 능력이 있다고 볼 수 있습니다. 지금까지는 재귀를 많
                     이 다루지 않았는데, 간단히 설명할 필요가 있습니다.
                     코드에 반복문이 있다면 이것을 재귀로 대체할 수 있습니다. 예를 들어 요소를 찾는 일을 다음과 같이 반복적으로 정
                     의할 수 있습니다(예제 파일: recursive.js).
                      function find(toFind, array){
                        let found = "not found";
                        array.forEach((element) => {
                          if(element == toFind){
                            found = "found";
                          };
                        });
                        return found;
                      };
                      console.log(find(3, [3, 9, 2])); // 결과: found
                      console.log(find(3, [2, 9, 3])); // 결과: found
                      console.log(find(3, [2, 9, 2])); // 결과: not found

                     하지만 이것은 find 재귀를 이용해서 구현할 수도 있습니다(예제 파일: recursive-1.js).
                      function find(toFind, array){
                        if(array[0] === toFind) {
                          return "found";
                        }else if(array.length === 0){
                          return "not found";
                        }else{
                          return find(toFind, array.slice(1));
                        }
                      };
                      console.log(find(3, [3, 9, 2])); // 결과: found
                      console.log(find(3, [2, 9, 3])); // 결과: found
                      console.log(find(3, [2, 9, 2])); // 결과: not found

                                                                                         계속


                   2   역주 참조적 투명성: 프로그램 동작을 변경하지 않은 채 관련 값을 대체할 수 있다면 표현식을 참조상 투명하다고 할 수 있습니다.

             428




         리팩토링 자바스크립트(본문)최종.indd   428                                                            2018-09-19   오전 1:31:34
   15   16   17   18   19   20   21   22   23