29.조건문 쪼개기 Decompose Conditional

-2018.05.03-

이해하기 어려운 조건문이 있는 코드를 자주 보게 됩니다. 이 기법의 목적은 조건이 있는 함수를 추출하여 코드를 읽기 쉽게 만드는 것입니다. 조건이 추출되어 종속성으로 주입되는 경우 코드를 테스트하는 것이 더 쉬울 것입니다.

이 기술은 좋은 변수 이름을 사용하는 것이 조건을 설명하기에 충분하지 않을 때 유용합니다.

  • 조건은 클래스의 여러 부분에서 중복됩니다.
  • 조건이 다른 클래스를 따라 복제됩니다.
  • 복잡함 때문에 조건을 격리하여 테스트 하십시오.
class Simple_Example{
 
   void Example(){
       if(date < SUPPER_STAR || date > SUPPER_END)
           charge = quantity * winterRate + winterServiceCharge;
       else 
           Charge = quantity * summerRate;
   }
}

코드가 이해하기 쉬운 상태로

class Simple_Example{
   void Example(){
       if(IsNotSummer())
           charge = CalculateWinterRate();
       else 
           Charge = CalculateSummerRate());
       }
}

private bool IsNotSummer(){
  return date < SUPPER_STAR || date > SUPPER_END;
}

private bool CalculateWinterRate(){
  return quantity * winterRate + winterServiceCharge;
}

private bool CalculateSummerRate(){
  return quantity * summerRate;
}

Decompose 조건 리팩토링을 적용할 수 있습니다.