Search
♻️

[디자인 패턴 - 생성 패턴] 빌더 패턴 (Builder)

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) 될때마다 DirectorBuilder 에 통보
BuilderDirector 의 요청을 처리하여 제품에 부품을 추가
사용자는 Builder 에서 제품을 검색
상호작용 다이어그램

6. 결과

제품에 대한 내부 표현을 다양하게 변화 가능
어떤 요소로 전체 제품을 빌드하고 그 요소들이 어떤 타입으로 구현되는지는 빌더만 알고 있음
제품을 복합할때는 빌더에 정의된 추상 인터페이스를 통해 사용자가 동작
새로운 제품의 표현 방법이나 제품의 복합 방법이 바뀔때 추상 인터페이스에 정의한 빌더 클래스에서 상속을 통해 새로운 서브 클래스 정의하면 됨
생성과 표현에 필요한 코드 분리
복합 객체 생성
복합 객체의 내부 표현 방법
복합 객체를 생성하는 절차를 세밀하게 나눌 수 있음
디렉터의 통제 아래 하나씩 내부 구성요소들을 만들어 나감

7. 예시 코드

WIP