[ 목차 ]
안녕하세요, 자바 개발자 여러분!
오늘은 자바 디자인 패턴 중 사랑받는 빌더(Builder) 패턴에 관해서 알아보려고 합니다. 이 글을 통해 빌더 패턴의 개념과 사용법에 대해 더 잘 이해하고 실제 프로젝트에 적용하여 자바 개발 역량을 더욱 향상시켜 봅시다!
빌더 패턴이란 무엇인가요?
빌더 패턴은 생성 패턴 중 하나로, 복잡한 객체를 생성할 때 유용한 패턴입니다. 개발자들은 종종 많은 속성을 가진 객체를 생성해야 할 때, 생성자와 setter 메서드를 이용하는 것이 계속해서 불편하다는 것을 느낍니다. 따라서 빌더 패턴을 사용하면 객체의 복잡한 생성 과정을 간결하게 만들 수 있습니다.
빌더 패턴의 주요 컴포넌트
- Builder: 객체 생성을 담당하는 인터페이스를 정의합니다. build 메서드를 포함하고 있어야 합니다.
- ConcreteBuilder: Builder 인터페이스를 구현한 클래스로 세부적으로 객체를 생성합니다.
- Director: Builder 인터페이스를 사용하여 실제로 객체를 생성하는 로직을 제어합니다.
- Product: 생성될 복잡한 객체를 의미합니다.
빌더 패턴의 사용 예시
식당 메뉴 주문 시스템
식당 메뉴 주문 시스템을 예로 들어 빌더 패턴을 어떻게 적용할 수 있는지 알아봅시다. 고객은 음식의 종류와 옵션을 선택하여 주문을 합니다. 다양한 옵션을 고려하며 주문 객체를 쉽게 만들려면 빌더 패턴이 유용할 것입니다.
Builder 인터페이스 작성
음식과 옵션을 선택하는 메서드를 가진 Builder 인터페이스를 작성합니다.
public interface FoodBuilder {
FoodBuilder setMainDish(String mainDish);
FoodBuilder setSideDish(String sideDish);
FoodBuilder setDrink(String drink);
Food build();
}
ConcreteBuilder 클래스 구현
실제 음식과 옵션을 정하는 메서드가 있는 ConcreteBuilder 클래스를 구현합니다.
// ConcreteBuilder 클래스 구현
public class MenuBuilder implements FoodBuilder {
private String mainDish;
private String sideDish;
private String drink;
@Override
public FoodBuilder setMainDish(String mainDish) {
this.mainDish = mainDish;
return this;
}
@Override
public FoodBuilder setSideDish(String sideDish) {
this.sideDish = sideDish;
return this;
}
@Override
public FoodBuilder setDrink(String drink) {
this.drink = drink;
return this;
}
@Override
public Food build() {
return new Food(mainDish, sideDish, drink);
}
}
Director 클래스 구현
Builder 인터페이스를 이용하여 주문 객체를 생성하는 Director 클래스를 구현합니다.
// Director 클래스 구현
public class FoodDirector {
private final FoodBuilder builder;
public FoodDirector(FoodBuilder builder) {
this.builder = builder;
}
public Food createCompleteMenu() {
return builder.setMainDish("치킨")
.setSideDish("감자샐러드")
.setDrink("코카콜라")
.build();
}
}
Product 클래스 작성
생성될 주문 객체인 Product 클래스를 작성합니다.
// Product 클래스 작성
public class Food {
private final String mainDish;
private final String sideDish;
private final String drink;
public Food(String mainDish, String sideDish, String drink) {
this.mainDish = mainDish;
this.sideDish = sideDish;
this.drink = drink;
}
public String getMainDish() {
return mainDish;
}
public String getSideDish() {
return sideDish;
}
public String getDrink() {
return drink;
}
}
// 자바 빌더패턴 예제코드 사용
public class Main {
public static void main(String[] args) {
FoodBuilder menuBuilder = new MenuBuilder();
FoodDirector director = new FoodDirector(menuBuilder);
Food completeMenu = director.createCompleteMenu();
System.out.println("주문 메뉴 : ");
System.out.println("메인요리: " + completeMenu.getMainDish());
System.out.println("사이드메뉴: " + completeMenu.getSideDish());
System.out.println("음료: " + completeMenu.getDrink());
}
}
빌더 패턴의 장점
- 객체 생성 과정을 캡슐화하여 가독성과 유지보수성이 좋아집니다.
- 객체 생성 과정에서 필수적인 요소와 선택적인 요소를 분리할 수 있습니다.
- 코드의 중복을 줄이고 객체 조립을 통한 유연한 설계를 가능케 합니다.
자바 디자인 패턴 중 빌더(Builder) 패턴을 알아보았습니다. 빌더 패턴은 복잡한 객체를 생성할 때 매우 유용한 패턴으로, 가독성과 유지보수성을 향상시킬 수 있습니다. 이제 여러분도 빌더 패턴을 자유롭게 활용하여 프로젝트를 진행해 보세요!
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴
2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴
2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴
2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴
2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현
'JAVA' 카테고리의 다른 글
JAVA 디자인패턴 - 미디에이터(Mediator) 패턴의 정의와 동작 그리고 장단점 (0) | 2023.07.18 |
---|---|
JAVA 디자인패턴 - 멀티턴(Multiton) 패턴의 정의 장점 구현 (0) | 2023.07.18 |
JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
JAVA 디자인패턴 -프로토타입(Prototype) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
댓글