ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생성 패턴(Creational Pattern) - 빌더(Builder) 패턴
    Java/디자인패턴 2024. 11. 19. 09:53
    반응형

    1. 소속 카테고리

    빌더 패턴은 **생성 패턴(Creational Pattern)**에 속합니다. 생성 패턴은 객체 생성 과정을 캡슐화하여 객체 생성의 복잡성을 줄이고, 코드의 재사용성과 유연성을 향상시키는 데 중점을 둡니다.


    2. 특징

    • 복잡한 객체를 단계적으로 생성할 수 있도록 도와줍니다.
    • 동일한 생성 과정을 통해 서로 다른 표현(구성)을 가진 객체를 생성할 수 있습니다.
    • 클라이언트 코드와 객체 생성 코드를 분리하여 유지보수를 용이하게 만듭니다.

    3. 주요 구성 요소

    1. Builder (인터페이스 또는 추상 클래스): 객체 생성의 각 단계를 정의합니다.
    2. ConcreteBuilder: Builder 인터페이스를 구현하며, 객체의 생성 단계를 구체적으로 정의합니다.
    3. Director: Builder 객체를 사용하여 복잡한 객체를 생성합니다. 생성 절차를 관리합니다.
    4. Product: 생성된 최종 객체입니다.

    4. Java 예제

    요구 사항:

    사용자(User) 객체를 생성해야 합니다.

    • name, age, email, address 속성이 있으며, 일부 속성은 선택적으로 설정될 수 있습니다.
    • 객체 생성 시 가독성을 높이고, 설정할 속성의 유연성을 제공해야 합니다.
    // Product 클래스
    public class User {
        private String name;
        private int age;
        private String email;
        private String address;
    
        // Private Constructor
        private User(Builder builder) {
            this.name = builder.name;
            this.age = builder.age;
            this.email = builder.email;
            this.address = builder.address;
        }
    
        // Static Builder 클래스
        public static class Builder {
            private String name; // 필수
            private int age;     // 선택
            private String email; // 선택
            private String address; // 선택
    
            public Builder(String name) {
                this.name = name; // 필수 속성 설정
            }
    
            public Builder age(int age) {
                this.age = age;
                return this;
            }
    
            public Builder email(String email) {
                this.email = email;
                return this;
            }
    
            public Builder address(String address) {
                this.address = address;
                return this;
            }
    
            public User build() {
                return new User(this);
            }
        }
    
        @Override
        public String toString() {
            return "User{name='" + name + '\'' +
                    ", age=" + age +
                    ", email='" + email + '\'' +
                    ", address='" + address + '\'' +
                    '}';
        }
    }
    
    // Client 코드
    public class BuilderPatternExample {
        public static void main(String[] args) {
            User user1 = new User.Builder("John Doe")
                    .age(30)
                    .email("john.doe@example.com")
                    .address("123 Main Street")
                    .build();
    
            User user2 = new User.Builder("Jane Smith")
                    .email("jane.smith@example.com")
                    .build();
    
            System.out.println(user1);
            System.out.println(user2);
        }
    }

     

     

    5. 코드 실행 결과

    User{name='John Doe', age=30, email='john.doe@example.com', address='123 Main Street'}
    User{name='Jane Smith', age=0, email='jane.smith@example.com', address='null'}

     


    6. 장점

    1. 복잡한 객체 생성 논리를 단계별로 관리.
    2. 선택적 매개변수를 지원하여 가독성 증가.
    3. 객체 생성 코드를 클라이언트로부터 분리.

    7. 단점

    1. 클래스 수 증가 (Builder 클래스 필요).
    2. 작은 객체 생성에는 오히려 비효율적.
    반응형

    댓글

Designed by Tistory.