⇒ 결론 : 빌더 패턴은 이러한 문제들을 해결하기 위해서 별도의 Builder 클래스를 만들어 필수값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 step-by-step으로 값을 처리한 후에 build() 메소드를 통해서 최종적으로 인스턴스를 반환하는 방식이다.
샌드위치 클래스
→ 필수값 : price, size
→ 선택값 : ham, cheese, beverage
/* 샌드위치 */
public class Sandwich{
private int price;//가격
private String ham;//햄 종류
private String cheese; //치즈 종류
private int size;
private String beverage; //음료 종류
}
public Sandwich(){}
public Sandwich(int price, String ham, String cheese, int size, String beverage){
this.price = price;
this.ham = ham;
this.cheese = cheese;
this.size = size;
this.beverage = bevereage;
}
public Snadwich(int price, int size){
this.price = price;
this.size = size;
}
⇒ 이 방법의 문제점! Optional한 인자에 따라 새로운 생성자를 만들거나 Optional한 필드가 Null값으로 채워지는 이슈가 발생.
//순서 파악이 어렵고, 가독성이 떨어짐
new Sandwich(2400, "smoke ham", "mozarella", 20, "coke");
//불필요한 null을 채워야함
new Sandwich(2000, null, null , 20, null);