Intro::
디자인 패턴 중 생성 패턴인 빌더에 대해 알아봅시다.
빌더란?
빌더 패턴(Builder Pattern)은 복잡한 객체를 단계별로 생성할 수 있게 도와주는 설계 패턴입니다. 이 패턴은 객체의 생성 과정과 표현 방법을 분리해서 동일한 생성 절차에서 다양한 표현 결과를 얻을 수 있도록 합니다.
장점
- 복잡성 분리: 객체의 복잡한 생성 과정을 단순화하여, 사용자가 객체의 생성 과정을 몰라도 될 정도로 간단하게 객체를 생성할 수 있습니다.
- 재사용성: 같은 객체 생성 절차에서 다양한 표현 결과를 얻을 수 있어, 빌더만 교체해주면 다른 형태의 객체를 쉽게 만들 수 있습니다.
- 가독성: 최종적으로 객체를 생성할 때 세부 항목을 순차적으로 지정할 수 있어, 코드의 가독성이 높아집니다.
단점
- 구현 복잡성: 간단한 객체에 대해 빌더 패턴을 사용하는 것은 과도한 설계일 수 있습니다. 빌더, 구체적인 빌더, 디렉터 등 여러 클래스와 인터페이스를 추가로 구현해야 하기 때문에, 작은 프로젝트나 간단한 객체에는 오히려 코드를 복잡하게 만들 수 있습니다.
- 코드 양 증가: 객체를 생성하는 데 필요한 코드의 양이 늘어나며, 유지 보수의 복잡성도 증가할 수 있습니다.
- 성능 저하: 객체 생성 과정이 여러 단계로 나뉘며 각 단계에서 객체 상태를 유지하고 관리해야 하기 때문에 성능 저하가 발생할 수 있습니다.
코드
// 피자 제품 클래스
class Pizza {
private String dough;
private String sauce;
private String topping;
// setter 메소드
public void setDough(String dough) { this.dough = dough; }
public void setSauce(String sauce) { this.sauce = sauce; }
public void setTopping(String topping) { this.topping = topping; }
// toString 메소드로 피자 정보 출력
public String toString() {
return "Dough: " + dough + ", Sauce: " + sauce + ", Topping: " + topping;
}
}
// 피자 빌더 인터페이스
interface PizzaBuilder {
void buildDough();
void buildSauce();
void buildTopping();
Pizza getPizza();
}
// 구체적인 피자 빌더
class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public MargheritaPizzaBuilder() {
this.pizza = new Pizza();
}
public void buildDough() { pizza.setDough("Regular Crust"); }
public void buildSauce() { pizza.setSauce("Tomato"); }
public void buildTopping() { pizza.setTopping("Cheese"); }
public Pizza getPizza() {
return pizza;
}
}
// 사용 예
public class BuilderExample {
public static void main(String[] args) {
PizzaBuilder builder = new MargheritaPizzaBuilder();
builder.buildDough();
builder.buildSauce();
builder.buildTopping();
Pizza pizza = builder.getPizza();
System.out.println(pizza);
}
}
References::
Loading Comments...