JAVA

JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현

TECH 톡마스터 2023. 7. 17.

[ 목차 ]

    JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현
    JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현

     

    안녕하세요, 자바 개발자 여러분!

    오늘은 자바 디자인 패턴 중 사랑받는 빌더(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) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴

     

    JAVA 디자인패턴 - 옵저버(Observer) 패턴

    [ 목차 ] 안녕하세요. 이번에는 Java 디자인패턴 중 옵저버(Observer) 패턴에 대해서 알아보겠습니다. 1. 옵저버(Observer) 패턴이란? 옵저버 패턴은 디자인 패턴 중 하나로, 한 객체의 상태가 변화하면

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

     

    JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 데코레이터(Decorator) 패턴에 대해서 알아보겠습니다. 1. 데코레이터(Decorator) 패턴 이란? 데코레이터 패턴은 기존 객체에 동적으로 새로운 기능을

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴

     

    JAVA 디자인패턴 - 프록시(Proxy) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다. 1. 프록시(Proxy) 패턴 이란? 프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴

     

    JAVA 디자인 패턴 - 커맨드(Command) 패턴

    안녕하세요. 오늘 알아볼 JAVA 디자인 패턴은 커맨드(Command) 패턴입니다. 1. 커맨드(Command) 패턴 이란? 커맨드 패턴은 요청을 객체로 캡슐화하여 메서드 호출에 의한 연동을 개선하고, 호출 정보를

    tech.dj-tiger.com

    2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

     

    JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 스트래티지(Strategy) 패턴에 대해서 작성해 보겠습니다. 스트래티지(Strategy) 패턴 이란? 스트래티지 패턴은 알고리즘 군을 정의한 다음 각각을 캡슐

    tech.dj-tiger.com

    2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

     

    JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

    [ 목차 ] 안녕하세요. JAVA 디자인패턴 중 템플릿 메서드(Template Method) 패턴에 대해서 알아볼까요? 템플릿 메서드(Template Method) 패턴 이란? 템플릿 메서드 패턴은 알고리즘의 골격을 제공하고, 일부

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴

     

    JAVA 디자인패턴 - 컴포지트(Composite) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 컴포지트(Composite) 패턴입니다. 컴포지트(Composite) 패턴 이란? 컴포지트 패턴은 객체들의 조직을 트리 구조로 구성하여 전체-부분 계층을 표

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

     

    JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

    [ 목차 ] 안녕하세요, 프로그래밍 세계의 친구분들! 오늘은 자주 사용되는 자바 디자인 패턴 중 하나인 이터레이터(Iterator) 패턴에 대해 알아볼까요? 디자인 패턴이란 소프트웨어를 설계할 때 반

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

     

    JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

    [ 목차 ] 안녕하세요, 자바 프로그래밍을 사랑하는 여러분! 오늘은 디자인 패턴 중 하나인 비지터(Visitor) 패턴에 대해 자세히 알아볼까요? 디자인 패턴은 우리의 코드를 더 유연하고 효율적으로

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현

     

    댓글

    💲 추천 글