1. 의도
•
GoF
◦
복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공
▪
객체를 생성하는 방법과 객체를 표현하는 방법을 분리 →항상 동일한 생성 프로세스를 제공하는 것
◦
객체의 생성 알고리즘과 조립 방법을 분리하기 위한 목적
•
Head First
◦
제품을 여러 단계로 나눠서 만들도록 제품 생산 단계를 캡슐화할 때 사용
2. 활용성
•
GoF
◦
복합 객체의 생성 알고리즘이 이를 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때
◦
합성할 객체들의 표현이 서로 다르더라도 생성 절차에서 이를 지원해야 할 때
•
Head First
◦
용도
▪
복합 객체를 구축하는 용도
◦
장점
▪
복합 객체 생성 과정 캡슐화
▪
여러단계와 다양한 절차를 걸쳐 객체를 만들 수 있음 (팩토리 패턴은 한 단계에서 모든걸 처리)
▪
제품의 내부 구조를 클라이언트로부터 보호
▪
클라이언트는 추상 인터페이스만 볼 수 있기에 제품을 구현한 코드 쉽게 변경 가능
◦
단점
▪
팩토리를 사용할 때 보다 객체를 만들 때 클라이언트에 관해 더 많이 알아야 함
•
기타
◦
생성자에 인자가 많을 때 활용하면 좋음
3. 구조
•
UML Class Diagram
4. 참여자
참여자 | 역할 | 예시 |
Builder | Product 객체의 일부 요소들을 생성하기 위한 추상 인터페이스 | |
ConcreteBuilder | 클래스에 정의된 인터페이스를 구현.
- 제품의 부품들을 모아 빌더로 복합
- 생성한 요소의 표현을 정의하고 관리
- 제품을 검색하는데 필요한 인터페이스 제공 | |
Director | Builder 인터페이스를 사용하는 객체를 합성 | |
Product | Director가 Builder로 만들어낸 결과물. 생성할 복합 객체를 표현.
- 제품(Product) 내부 표현을 구축 (built)
- 복합 객체가 어떻게 구성되는지에 관한 절차 정의 |
5. 협력 방법
•
사용자는 Director 객체를 생성하고, 이렇게 생성한 객체를 자신이 원하는 Builder 객체로 합성해 나감
•
제품(Product)의 일부가 구축(built) 될때마다 Director 는 Builder 에 통보
•
Builder 는 Director 의 요청을 처리하여 제품에 부품을 추가
•
사용자는 Builder 에서 제품을 검색
•
상호작용 다이어그램
6. 결과
•
제품에 대한 내부 표현을 다양하게 변화 가능
◦
어떤 요소로 전체 제품을 빌드하고 그 요소들이 어떤 타입으로 구현되는지는 빌더만 알고 있음
◦
제품을 복합할때는 빌더에 정의된 추상 인터페이스를 통해 사용자가 동작
◦
새로운 제품의 표현 방법이나 제품의 복합 방법이 바뀔때 추상 인터페이스에 정의한 빌더 클래스에서 상속을 통해 새로운 서브 클래스 정의하면 됨
•
생성과 표현에 필요한 코드 분리
◦
복합 객체 생성
◦
복합 객체의 내부 표현 방법
•
복합 객체를 생성하는 절차를 세밀하게 나눌 수 있음
◦
디렉터의 통제 아래 하나씩 내부 구성요소들을 만들어 나감
7. 예시 코드
•
WIP