GOF의 DesignPattern

3장 빌더 패턴

춤추는수달 2023. 3. 1. 00:24

이번 글에서도 저번 글에 이어서 생성 패턴에 대해 알아봅니다. https://ddukddaksudal.tistory.com/127

 

3장. 생성 패턴 & 추상 팩토리 패턴

5가지 생성 패턴에 대해 공부해봅니다. 생성 패턴은 이름처럼 인스턴스를 생성하고 복합하는 방법에 대한 패턴들입니다. 여기서는 미로 만들기를 주제로, 각 생성 패턴들을 사용했을 때, 어떤

ddukddaksudal.tistory.com

저번 글에서 처럼 미로를 제작하는 시스템을 설계해 볼 것입니다. 이번에 사용할 패턴은 빌더 패턴입니다.


우선 빌더 패턴에 대해 간략히 설명한다. 빌더 패턴은 제품의 내부 표현과 생성을 분리시키고, 내부 표현을 다양화할 수 있는 패턴이다. 일반화된 클래스 구조를 보자. 참여자는 다음과 같다.

  • Client : 제품을 만들고 싶은 객체
  • Directer : 제품을 생산하기 위한 Builder를 가지고, Client의 요청에 따라 Builder에게 전달하는 객체
  • Builder : 제품을 생산하는 인터페이스를 가지고 있는 객체
  • ConcreteBuilder : 종류별 제품의 생산 방법을 알고있는 객체
  • Product : 제품 객체

이 구조를 사용한 흐름은 아래와 같다.

  1. Client가 Directer에게 Product 생산을 요청한다.
  2. Directer는 자신이 가지고 있는 Builder에게 제품 생산을 요청한다.
  3. Builder는 Builder의 서브클래스에 구현된 BuildPart 함수들을 사용해 알맞은 부품들로 조합된 Product를 생산한다.
  4. Client는 완성된 Product를 얻기 위해 GetResult 함수를 호출한다.

여기서 ConcreteBuilder 클래스를 늘리면 제품의 내부 표현을 쉽게 다양화 할 수 있다. 

빌더 패턴은 제품의 생성과 표현을 분리하는 패턴이다. 이 패턴을 사용하면 제품 생성 절차를 세밀화 하고 각 절차를 조합할 수 있다.

 


이제 미로를 제작하는 데에 빌더 패턴을 사용한 예시를 보자. 이번에도 책에 나온 상황과 완전히 일치하지는 않지만 대부분 일치한다. 

여기서 CountingMazeBuilder는 사실 미로를 생성하지 않지만, 미로가 생성될 때 방과 문의 갯수를 카운팅하여 그 갯수를 GetCounts()를 통해 얻을 수 있다.

 


그런데 구조를 얼핏 보면 추상 팩토리 패턴과 상당히 비슷해 보인다. 실제로 비슷하다. 빌더 패턴의 추상 팩토리 패턴과의 차이점은 아래와 같다.

  • 추상 팩토리 : 제품의 부품(e.g Door, Room) 생산 시 즉시 반환한다. 제품군들 사이의 유연성 확보에 최적화 되어있다.
  • 빌더 : 복합 제품(e.g maze)의 완성 후 반환한다. 복합 제품의 단계별 생산과정을 조정하는데 좋다.

'GOF의 DesignPattern' 카테고리의 다른 글

장식자 패턴  (0) 2023.09.09
3장 팩토리 메서드 패턴  (0) 2023.03.02
3장. 생성 패턴 & 추상 팩토리 패턴  (0) 2023.02.27
2장 사례 연구: 문서 편집기 설계  (0) 2023.02.25
1장 서론.  (0) 2023.02.07