Decompose Conditional, 조건문 분해하기를 알아보자.
요약

코드
if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))
charge = quantity * plan.summerRate;
else
charge = quantity * plan.regularRate + plan.regularServiceCharge;if (summer())
charge = summerCharge();
else
charge = regularCharge();배경
- 복잡한 조건부 로직은 프로그램을 읽기 어렵게 만든다.
- 긴 함수도 어려운데, 거기에 조건문까지 추가되면 더욱 어려워진다.
- 무슨일이 일어나는지는 설명해주지만, “왜”일어나는지는 제대로 말해주지 않을 때가 많다.
- 이는 곧 맥락이 반영되어 있지 않은 코드를 말한다.
- 조건문을 분리하고, 해체된 코드 덩어리들에 의도를 살린 이름을 붙여 함수로 바꿔주자.
절차
- 조건식과 조건식에 딸린 조건절 각각을 함수로 추출한다.
예시
if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))
charge = quantity * plan.summerRate;
else
charge = quantity * plan.regularRate + plan.regularServiceCharge;- 여름 철이면 할인율이 달라지는 코드이다.
if (summer())
charge = quantity * plan.summerRate;
else
charge = quantity * plan.regularRate + plan.regularServiceCharge;
function summer() {
return !aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd);
}summer()함수를 만들어서 조건문을 분리했다.
if (summer())
charge = summerCharge();
else
charge = regularCharge();
function summer() {
return !aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd);
}
function summerCharge() {
return quantity * plan.summerRate;
}
function regularCharge() {
return quantity * plan.regularRate + plan.regularServiceCharge;
}- 나머지 함수들도 모두 추출했다.