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