Design Architecture/Refactoring
Decompose Conditional
lipnus
2022. 4. 20. 10:41
반응형
조건문 분해하기
if조건문이 주절주절이면 의미를 확인하기 어려우므로, 매소드로 빼내는 것.
이건 원래 하던거네..
before
import java.time.LocalDate;
public class DecomposeConditional_before {
static class Stadium {
//...
public double summerRate;
public double winterRate;
public double winterServiceCharge;
public Stadium(double summerRate, double winterRate, double winterServiceCharge) {
super();
this.summerRate = summerRate;
this.winterRate = winterRate;
this.winterServiceCharge = winterServiceCharge;
}
private LocalDate SUMMER_START = LocalDate.of(2021, 7, 1);
private LocalDate SUMMER_END = LocalDate.of(2021, 8, 31);
public double getTicketPrice(LocalDate date, int quantity) {
double charge;
if(date.isBefore(SUMMER_START) || date.isAfter(SUMMER_END) ) {
charge = quantity * winterRate + winterServiceCharge;
} else {
charge = quantity * summerRate;
}
return charge;
}
}
public static void main(String[] args) {
Stadium stadium = new Stadium(75000, 90000, 12000);
LocalDate today = LocalDate.parse("2021-09-15");
System.out.println("Ticket price : " + stadium.getTicketPrice(today, 5));
}
}
after
import java.time.LocalDate;
public class DecomposeConditional_before {
static class Stadium {
//...
public double summerRate;
public double winterRate;
public double winterServiceCharge;
public Stadium(double summerRate, double winterRate, double winterServiceCharge) {
super();
this.summerRate = summerRate;
this.winterRate = winterRate;
this.winterServiceCharge = winterServiceCharge;
}
private LocalDate SUMMER_START = LocalDate.of(2021, 7, 1);
private LocalDate SUMMER_END = LocalDate.of(2021, 8, 31);
public double getTicketPrice(LocalDate date, int quantity) {
double charge;
if( isSummer(date) ) {
charge = quantity * winterRate + winterServiceCharge;
} else {
charge = quantity * summerRate;
}
return charge;
}
private boolean isSummer(LocalDate date) {
if(date.isBefore(SUMMER_START) || date.isAfter(SUMMER_END)) return true;
return false;
}
}
public static void main(String[] args) {
Stadium stadium = new Stadium(75000, 90000, 12000);
LocalDate today = LocalDate.parse("2021-09-15");
System.out.println("Ticket price : " + stadium.getTicketPrice(today, 5));
}
}
반응형