[Refactoring] 조건문 간결화

조건문 간결화

조건문 쪼개기

수정 전

if (date.before (SUMMER_START) || date.after(SUMMER_END))
  charge = quantity * winterRate + winterServiceCharge;
else charge = quantity * summerRate;

수정 후

if (notSummer(date))
  charge = winterCharge(quantity);
else charge = summerCharge (quantity);

중복 조건식 통합

수정 전

double disabilityAmount() {
  if (seniority < 2) return 0;
  if (monthsDisabled > 12) return 0;
  if (isPartTime) return 0;
  // 장애인 공제액 산출
}

수정 후

double disabilityAmount () {
  if (isNotEligableForDisability()) return 0;
  // 장애인 공제액 산출
}
boolean isNotEligibleForDisability () {
  return ((seniority < 2) || (monthsDisabled > 12) || (isPartTime));
}

조건문의 공통 실행 코드 빼내기

수정 전

if (isSpecialDealO) {
  total = price * 0.95;
  send() ;
} else {
  total = price * 0.98;
  send () ;
}

수정 후

if (isSpecialDealO)
  total = price * 0.95;  
else
  total = price * 0.98;
send() ;

제어 플래그 제거

여러 겹의 조건문을 감시 절로 전환

수정 전

double getPayAmount() {
  double result ;
  if (isDead) result = deadAmount();
  else {
    if (isSeparated) result = separatedAmount();
    else {
      if (isRetired) result = retiredAmount();
      else resul t = normalPayAmount ();
    }
  }
  return result ;
}

수정 후

double getPayAmount() {
  if (isDead) return deadAmount();
  if (isSeparated) return separatedAmount();
  if (isRetired) return retiredAmount();
  return normalPay Amount();
}

조건문을 재정의로 전환

Null 검사를 널 객체에 위임

어설션 넣기