Page 12 - 006963
P. 12

1.2         구현 세부 사항에 관심을 두면 어떨까?
                                                                      Refacto R ing JavaSc R ipt






                   숫자에 2를 곱하는 간단한 함수가 있다고 가정해 보겠습니다.

                     function byTwo(number){
                       return number  *  2;
                     }

                   약간 다른 방식이지만 같은 결괏값을 내는 함수를 작성할 수도 있습니다.

                     function byTwo(number){
                       return number << 1;
                     }

                   두 코드 모두 여러 애플리케이션에서 잘 실행될 것입니다. byTwo 함수를 사용한 테스트들은 기본
                   적으로 입력 숫자와 두 배를 한 결괏값에 대응(mapping)한 것뿐입니다. 대부분 * 또는 << 연산자가
                   사용되었다는 것보다 결과에 더 많은 관심을 둡니다. 이것을 구현 세부 사항이라고 합니다. 이러

                   한 세부 사항들을 동작이라고 볼 수도 있지만, 우리가 입력 값과 함수의 결괏값만 중요하게 여긴
                   다면 그것은 중요한 사항이 아닙니다.

                   앞에서 두 번째 byTwo 함수를 사용했다면, number 인수가 너무 클 때(예: 1조를 입력해 보세요:
                   1000000000000 << 1) 문제가 발생한다는 것을 확인할 수 있습니다. 이것들이 갑자기 신경 써야
                   하는 구현 세부 사항을 뜻할까요?

                   아닙니다. 우리는 결괏값이 잘못되었다고 여길 것입니다. 이 말의 뜻은 테스트 케이스가 처음 생
                   각했던 것보다 더 많은 경우를 포함해야 한다는 것을 의미합니다. 그리고 우리는 즐겁게 이 구

                   현을 바꾸면 됩니다. 모든 테스트 사례를 만족시키는 것이죠. return  number * 2나 return
                   number + number는 우리의 주된 걱정거리가 아닙니다.

                   변경한 구현 세부 사항에서 숫자를 두 배로 한 부분이 우리가 신경 써야 할 동작입니다. 또 우리가
                   테스트하는 것도(수동적 방법이든 자동화된 방법이든) 관심을 가져야 할 부분입니다. 세부 사항
                   테스트는 대부분 불필요할 뿐만 아니라, 리팩토링할 수 없는 코드 기반을 만들기도 합니다.









             028




         리팩토링 자바스크립트(본문)최종.indd   28                                                             2018-09-19   오전 1:31:09
   7   8   9   10   11   12   13   14   15   16   17