본문 바로가기

Language/Design Pattern

[Design Pattern: 생성] 5. Builder

목적

  • 외부 클래스에 의해 객체가 만들어지고 그에 따라 유연하게 객체를 만들 수 가 있다.
  • 속성값을 가지는 객체를 생성할때 다른 제 3의 class(Builder)가 해당 객체를 만들어 줌


Builder Patter in JAVA API

Java에서 사용하는 Builder 디자인 패턴의 예이다.

이렇게 .함수().함수() 이런 패턴을 사용한다.


2개의 BuilderPattern??

좀 이상하게 Builder에 대해 검색을 해보면 2가지 방향(방법?)이 있는듯하다.

하나는, 위에서 설명한 어떤 객체를 생성할 때 다른 class가 생성을 하는 것이다. 이를 설명하기 위해 아래 스타벅스 예제가 굉장히 효과적이다.

<스타벅스 예제>

스타벅스 커피를 만들기 위해 Abstract StarbuckBuilder가 있다. 이것을 상속한 Tea, Coffer가 있다.

따라서 스타벅스를 만들기 위해 이런 빌더를 Waiter에게 넘긴다.

손님은 Waiter에게 Starbucks를 만들어 달라고 주문하면 Waiter는 입력받은 Builder에 의해 각각의 Starbucks를 만드는 구조이다.


다른 하나는, 목적이 좀 다르다. 흔히 Javascript에서 많이 보단 Ojbect.function().function().function().function().function().function() 구조이다.

예제를 보자

<유저 객체 만들기>

이처럼 User 객체에 Properties를 채우기 위해 이런 방법을 사용했다. 상식적으로 이런 프로퍼티를 채우기 위해서는 수많은 setter() 를 이용하던지 Constructor에 모든 프로퍼티를 떄려넣어야 한다. 하지만 요렇게 하면 있어 보인다(?).

이런 코드가 가능하기 위해서는 다음과 같이 User 클래스를 만들어야 한다.