[디자인패턴] 빌더패턴(Builder pattern)

2016. 11. 17. 11:08프로그래밍/디자인패턴

    목차

빌더패턴(Builder pattern)


Builder 패턴의 의도는 복잡한 객체의 생성을 표현으로 부터 분리시키는 것


  작성형식

Builder - 객체(제품)를 생성하는 추상 인터페이스

Concrete Builder - Builder의 구현 클래스. 다른 객체를 생성할 수 있도록 하는 구체적인 클래스. 객체를 만들기 위해 부분(부품)을 생성하고 조립한다.

Director - Director클래스는 객체 생성의 정확한 순서(sequenct)를 다루는 부분에 책임이 있다. 이 클래스는 ConcreteBuilder를 인자로 받아서 필요한 동작을 수행한다.

Product - Builder를 이용해서 Director가 만들어낸 최종 객체



  내용


빌더패턴은 코드의 가독성도 뛰어나고 사용하기도 쉽다. 다만 코드 사용량이 점층적 생성자 패턴 등보다는 많으므로 인자가 충분히 많은 상황에서 이용 해야하는게 좋다. 물론 새로운 인자가 추가될 수도 있다는 것을 고려해서 사용하는 방법도 괜찮다.


유용한 경우

1. 복잡한 객체를 생성할 때 그 객체를 구성하는 부분들을 생성한 후 그것을 조합 하여도 객체 생성이 가능할 경우, 
즉 객체의 부분을 생성하는 것과 그들을 조합해서 전체 객체를 생성하는 것이 독립적으로 이루어 질 경우

2. 서로 다른 표현방식을 가지는 객체를 동일한 방식으로 생성하고 싶을 경우.

장점
1. Builder 클래스는 Director클래스에게 객체를 생성할 수 있도록 인터페이스를 제공한다. 대신 생성되는 개체의 내부구조나 표현방식 조합 방법은 Builder클래스 내부에 숨긴다. 따라서 Builder패턴에서 생성되는 객체의 내부구조가 바뀔 경우 기존 소스코드에 영향에 주지 않으며 새로운 하위 클래스를 생성하면 된다.

2. 객체를 생성하는 부분과 그것을 실제 표현하고 구성하는 부분을 분리 시켜줌으로써 서로간의 독립성을 기여할 수 있다.

3. 객체를 한꺼번에 생성하는 것이 아니라 부분 생성 후 최종 결과를 얻어가는 방식으로 객체 생성 과정을 상세히 지켜볼 수 있다.

단점
1. 객체 생성을 추가하는 것은 쉬우나 객체를 구성하는 각 부분들을 새롭게 추가하는 것은 어렵다.

2.  생성되는 객체의 구성을 명확히 하여 추가하거나 수정해야하는 부분이 없어야 한다.


  참조


https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4

http://devsw.tistory.com/59

http://bellgori.tistory.com/entry/Android-pattern-04-%EB%B9%8C%EB%8D%94-%ED%8C%A8%ED%84%B4