-
생성 패턴(Creational Pattern) - 빌더(Builder) 패턴Java/디자인패턴 2024. 11. 19. 09:53반응형
1. 소속 카테고리
빌더 패턴은 **생성 패턴(Creational Pattern)**에 속합니다. 생성 패턴은 객체 생성 과정을 캡슐화하여 객체 생성의 복잡성을 줄이고, 코드의 재사용성과 유연성을 향상시키는 데 중점을 둡니다.
2. 특징
- 복잡한 객체를 단계적으로 생성할 수 있도록 도와줍니다.
- 동일한 생성 과정을 통해 서로 다른 표현(구성)을 가진 객체를 생성할 수 있습니다.
- 클라이언트 코드와 객체 생성 코드를 분리하여 유지보수를 용이하게 만듭니다.
3. 주요 구성 요소
- Builder (인터페이스 또는 추상 클래스): 객체 생성의 각 단계를 정의합니다.
- ConcreteBuilder: Builder 인터페이스를 구현하며, 객체의 생성 단계를 구체적으로 정의합니다.
- Director: Builder 객체를 사용하여 복잡한 객체를 생성합니다. 생성 절차를 관리합니다.
- 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. 장점
- 복잡한 객체 생성 논리를 단계별로 관리.
- 선택적 매개변수를 지원하여 가독성 증가.
- 객체 생성 코드를 클라이언트로부터 분리.
7. 단점
- 클래스 수 증가 (Builder 클래스 필요).
- 작은 객체 생성에는 오히려 비효율적.
반응형'Java > 디자인패턴' 카테고리의 다른 글
행동(Behavioral) - 커맨드(Command) 패턴 (0) 2024.11.21 구조 패턴(Structural Pattern) - 데코레이터(Decorator) 패턴 (0) 2024.11.20 행동(Behavioral) - 방문자(Visitor) 패턴 (0) 2024.11.18 행동(Behavioral) - 중재자(Mediator) 패턴 (0) 2024.11.17 생성(Creational) - 추상 팩토리(Abstract Factory) 패턴 (0) 2024.11.16