
빌더 패턴(Builder Pattern)
빌더 패턴(Builder Pattern)은 객체 생성의 복잡성을 줄이고, 다양한 표현 방식을 제공하는 생성 패턴(Creational Pattern) 중 하나입니다. 이 패턴은 객체를 생성하는 과정과 그 객체의 표현 방식을 분리하여 동일한 생성 절차에서 서로 다른 객체를 생성할 수 있도록 합니다.
특징
- 복잡한 객체 생성
복잡한 객체를 생성할 때, 생성 과정이 복잡하거나 여러 단계로 나뉘어 있다면 빌더 패턴이 유용합니다. - 객체 생성과 표현의 분리
빌더 패턴은 객체를 생성하는 코드와 객체의 구체적인 표현(구조나 내용)을 분리합니다. 이를 통해 재사용성과 유지보수성을 높일 수 있습니다.
구성 요소
- Builder (빌더 인터페이스)
- 객체 생성에 필요한 단계를 정의하는 인터페이스입니다.
- 각 단계별로 메서드를 정의합니다.
- ConcreteBuilder (구체적인 빌더)
- Builder 인터페이스를 구현하며, 각 단계별로 실제 작업을 수행합니다.
- 최종적으로 생성된 객체를 반환하는 메서드를 제공합니다.
- Director (디렉터)
- Builder를 사용하는 주체로, 객체 생성의 순서를 정의합니다.
- 복잡한 생성 논리를 캡슐화하여 Builder에 위임합니다.
- Product (생성될 객체)
- 최종적으로 생성되는 복잡한 객체입니다.
// 생성, 구조, 행위
// 빌더 패턴
// 사전기반 - this. 사용, this() <---
public class Person {
// 멤버 변수 선언
private String name;
private int age;
// 외부 클래스 생성자
private Person(PersonBuilder builder) {
this.name = builder.name;
this.age = builder.age;
}
// Builder 클래스 정의
// static 내부 클래스로 정의 된다
public static class PersonBuilder {
private String name;
private int age;
// 초기화 - 필수 속성 초기화 하는 생성자
public PersonBuilder(String name, int age) {
this.name = name;
this.age = age;
}
// 선택적 속성을 설정하는 메서드
public PersonBuilder name(String name) {
this.name = name;
return this; // 메서드 체이닝을 위해 this 를 반환
}
public PersonBuilder age(int age) {
this.age = age;
return this; // 메서드 체이닝을 위해 this 를 반환
}
// 빌더 패턴에 핵심
public Person build() {
return new Person(this);
}
}
public static void main(String[] args) {
// Person p1 = new Person.PersonBuilder("홍길동", 10).build();
Person p1 = new Person.PersonBuilder.age(10).name("홍길동").build();
}
}
빌더 패턴의 장점
- 유연성: 객체 생성 절차와 표현 방식을 분리하여 다양한 객체를 생성할 수 있습니다.
- 재사용성: 동일한 생성 절차를 통해 다른 표현 방식의 객체를 생성할 수 있습니다.
- 가독성 향상: 복잡한 객체 생성 논리를 분리하여 코드를 더 이해하기 쉽게 만듭니다.
사용 사례
- 복잡한 객체를 생성해야 하며, 여러 단계로 나뉘어 있을 때.
- 동일한 생성 절차를 통해 다양한 표현 방식의 객체를 생성해야 할 때.
- 객체 생성 코드가 반복되거나 복잡할 때.
'디자인 패턴' 카테고리의 다른 글
| [디자인패턴] MVVM 패턴 (0) | 2025.01.23 |
|---|---|
| [디자인패턴] 디자인 패턴 설명 (1) | 2025.01.16 |
| [디자인패턴] - 전략 패턴(Strategy Pattern) (1) | 2025.01.16 |