[디자인 패턴] Builder 패턴 (복잡한 인스턴스 조립하기)

트레드링스

참고 : JAVA 언어로 배우는 디자인 패턴 입문

안녕하세요^^ 물류 플랫폼 트레드링스 개발팀 양갱입니다.

디자인 패턴을 사용하는 이유는 뭘까요?

개발자라면, 무언가를 만들면서 나도 모르게 반복적인 코드를 작성해본 경험이 한번쯤은 있을텐데요. (쿨럭쿨럭,,)


이럴때 반복적인 코드는 줄이고 좀더 효율적으로 소스코드를 관리하기 위해서 사용하는 것이 바로 디자인 패턴입니다.

디자인 이라고 해서 그림을 그리는 것으로 생각하셨다면 틀린것이 아닙니다! GOOD!

그림을 그리듯 코드를 디자인 하는 것이니까요.

자, 그럼 오늘은 디자인 패턴중의 하나인 Builder 패턴에 대해서 알아보겠습니다.

Builder를 검색해보면,


' ... 을 만드는 사람 ' 

이게 바로 Builder 패턴의 핵심입니다.


트레드링스 주변에는 높은 빌딩이 많습니다.
이런 빌딩을 세울 때 우선 지반을 다지고, 골격을 세우고,  아래에서 위로 조금씩 조금씩 만들어 나갑니다.
세상사 무엇이든 그렇지만, 크고 복잡한 건축물을 한 번에 완성하는것은 불가능 합니다.
우선 전체를 구성하고 있는 각 부분을 만들고 단계를 밟으면서 점차 큰 구조를 만들어 나가야 합니다. 


즉, Builder 패턴이란?
작은 구조를 가진 인스턴스를 쌓아 올려서 큰 구조를 만드는 패턴을 말합니다. 


우선, Builder 패턴을 본격적으로 소개하기 전에 명심해야 할 것이 있습니다!

바로 눈을 크게 뜨고 전체를 본다는 생각을 잊어선 안됩니다. 그 다음 부분적으로 접근하는 것이 좋습니다.

저도 자주 나무만 보다가 숲을 보지 못하는 경우가 많았는데요. 이번엔 우리 노오오오력 해봐요~!

 그런 의미에서 전체적인 구조를 먼저 살펴 보겠습니다.



우리가 살펴볼 예제는 화면에 문서를 만드는 프로그램 입니다.
예를들면, 텍스트만 있는 문서, HTML 태그로 구성된 문서 등 원하는 형식의 문서를 만들어 줍니다.


위 예제의 Builder 패턴의 등장인물은 총 4명입니다.
- Builder (건축자) = Builder 클래스
- ConcreteBuilder(구체적인 건축자) = TextBuilder 클래스 or HtmlBuilder 클래스
- Director(감독자) = Director 클래스
- Client(의뢰인) = Main 클래스


객체지향 프로그래밍이라는 말 많이 들어보셨죠? OOP에서 '누가 무엇을 알고 있을까?' 라는 화두는 상당히 중요합니다.
즉, 어떤 클래스가  어떤 메소드를  사용할 수 있나? 에 주의해서 프로그래밍을 할 필요가 있습니다.




Main 클래스는 Builder 클래스의 메소드를 모릅니다. Main 클래스는 Director 클래스의 Construct 메소드만을 호출 합니다. 그러면 Director 클래스 안에서 조용히 일이 진행되고 Main은 모르게 문서가 완성됩니다.


Director 클래스가 알고 있는 것은 Builder 클래스 입니다. Director 클래스는 Builder 클래스의 메소드를 사용해서 문서를 만듭니다. 그러나 Director 클래스는 자신이 실제로 이용하는 클래스 사실 무엇인지 모릅니다. TextBuilder인지, HtmlBuilder 인지 또는 Builder 의 다른 하위 클래스인지 모릅니다.





위에서 보시다시피 Director 클래스는 Builder 클래스의 메소드만을 사용하고 있고 Builder 클래스의 하위 클래스는 그 메소드를 구현합니다. Director 클래스가 자신이 이용하는 Builder 클래스의 하위 클래스를 모르는 것은 정말 잘 된 일입니다.


왜냐하면, 모르기 때문에 교체가 가능하기 때문입니다. TextBuilder 인스턴스로 만들지, HtmlBuilder 인스턴스로 만들지 아니면 다른 하위 클래스로 만들지 Director 클래스가 Builder의 구체적인 하위 클래스를 모르기 때문에 교환이 가능합니다.



여기서 다시한번 Builder 패턴의 정의를 떠올려 보겠습니다.

...을 만드는 사람 

작은 구조를 가진 인스턴스들을 쌓아서 큰 구조를 만드는 패턴입니다.


기업문화 엿볼 때, 더팀스

로그인

/