개요
비교하는 조건은 다르지만 그 결과로 수행하는 동작은 똑같은 코드들이 있다.
이렇게 조건은 다르지만 목적이 같은 조건식을 묶어 하나의 함수로 만들자
조건부 코드를 통합하면, 주로 함수 추출하기로 이어진다. 함수 추출하기는 '무엇'을 하는지 기술하던 코드를 '왜'하는지 말해주는 코드로 바꿔주는 효과적인 도구이다.
조건식 결과가 똑같더라도 진짜 독립된 검사들이라고 판단되면 절대 리팩터링하면 안된다.
예시: or 사용하기
//장애 수당 계산 function disabilityAmount(anEmployee){ if(anEmployee.seniority < 2) return 0; if(anEmployee.monthsDisabled > 12) return 0; if(anEmployee.isPartTime) return 0; //... } |
function disabilityAmount(anEmployee){ //합친 후 항상 테스트 if(anEmployee.seniority < 2 || anEmployee.monthsDisabled > 12) return 0; if(anEmployee.isPartTime) return 0; //... } |
function disabilityAmount(anEmployee){ //합친 후 항상 테스트 if(anEmployee.seniority < 2 || anEmployee.monthsDisabled > 12 || anEmployee.isPartTime) return 0; } |
function disabilityAmount(anEmployee){ if(isNotEligibleForDisability()) return 0; //내부 함수로 추출했다. 이 안에서만 의미있으므로 function isNotEligibleForDisability() { return anEmployee.seniority < 2 || anEmployee.monthsDisabled > 12 || anEmployee.isPartTime; } } |
예시:and 사용하기
function example(anEmployee){ if(anEmployee.onVacation) if(anEmployee.seniority > 10) return 1; return 0.5; } |
function example(anEmployee){ if((anEmployee.onVacation)&&(anEmployee.seniority > 10)) return 1; return 0.5; } |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
10 - 조건부 로직 간소화 - 조건부 로직을 다형성으로 바꾸기 (0) | 2023.09.08 |
---|---|
10 - 조건부 로직 간소화 - 중첩 조건문을 보호 구문으로 바꾸기 (0) | 2023.09.07 |
10 - 조건부 로직 간소화 - 조건문 분해하기 (0) | 2023.09.05 |
09 - 데이터 조직화 - 매직 리터럴 바꾸기 (0) | 2023.09.04 |
09 - 데이터 조직화 - 값을 참조로 바꾸기 (0) | 2023.09.03 |