빌더 Builder
🙊

빌더 Builder

Created
Apr 19, 2024 08:32 AM
Last edited time
Last updated April 19, 2024
Tags
CS
Language
URL

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...