Builder Pattern
Creational Pattern
Intro
빌더 패턴은 객체를 만들기 위해 사용된다.
객체는여러 하위 객체로 구성되거나복잡한 구성의 프로세스가 필요할 수도 있다.빌더 패턴을 사용하여 복잡한 생생 작업을단순화할 수 있다.빌더 패턴은 복잡한 객체를빌드하는 과정을캡슐화하거나, 숨기고 객체의표현과구성을분리한다.분리를 통해 동일한 구성 프로세스를 사용하여
다른 표현을 구성할 수 있다.Java에서 서로
다른 표현은동일한 구성 프로세스를 공유할 수 있는서로 다른 클래스의 객체를 만드는 것을 의미한다.
Builder Pattern 의 생성 배경
클래스를 생성하기 위해 선택적 매개변수가 많을 떄 적절하게 대응하기 어렵다.
점층적 생성자 패턴도 쓸 수는 있지만, 매개변수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다.
그래서 Setter를 통해 값을
설정하는
JavaBeans패턴을통해 사용
객체 하나를 만들기 위해서는 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지
일관성(consistency)이 무너진 상태에 놓이게 된다.클래스를
불변(immutable)상태로 만들 수 없다.
빌더 패턴은
명명된 선택적 매개변수(named optional parameters)를 흉내낸 것이다.
빌더 패턴은 계층적으로 설계된 클래스와 함께 쓰기에 좋다.
매개 변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다.
빌더는 점층적 생성자 보다 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고 자바빈즈보다 훨씬 안전하다.
빌터 패턴의 단점
빌더 생성 비용이 크지는 않지만 성능에 민감한 상황에서는 문제가 될 수 있다.
점층적 생성자 패턴보다는 코드가 장활에서 매개 변수 4개 이상은 되어야 값어치를 한다.
Builder 패턴의 구성요소

결론
Builder 클래스는 퍼블릭 인터페이스에 대한
캡슐화가 가능하다.
Director를 사용하는 경우에 대한 이야기
Director 클래스 없이 Builder만을 사용하는 패턴도 찾아볼 수 있다.
클라이언트는 빌더를 직접 인스턴스화하고 필요한 메서드를 호출하여 제품을 자체적으로 가져올 수 있다.
이런 방식은 telescoping constructor pattern에 대한 일시적인 해결책일 뿐이다.
속성이 너무 많지만 일부 속성이 선택적으로 설정되어야하는 클래스를 작성해야하는 경우
빌더를 통해 필수 속성만 설정하고 제품을 작성할 수 있다.
또 다른 예시(Java API)
StringBuilder의 경우 append를 통해 연속적인 문자열을 만들 수 있다.
HtmlDocumentBuilder, PdfDocumentBuilder, DocumentBuilder의 경우 구체적인 유형을 변경하여 다양한 문서 유형을 빌드할 수 있다.
주의사항
빌더 패턴은 추상 팩토리 패턴의 차이점
빌더패턴이단계별로 객체를 생성한다.추상 팩토리패턴은한 번에 객체를 반환한다.
Last updated
Was this helpful?