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