이번 글에서도 저번 글에 이어서 생성 패턴에 대해 알아봅니다. https://ddukddaksudal.tistory.com/127
저번 글에서 처럼 미로를 제작하는 시스템을 설계해 볼 것입니다. 이번에 사용할 패턴은 빌더 패턴입니다.
우선 빌더 패턴에 대해 간략히 설명한다. 빌더 패턴은 제품의 내부 표현과 생성을 분리시키고, 내부 표현을 다양화할 수 있는 패턴이다. 일반화된 클래스 구조를 보자. 참여자는 다음과 같다.
- Client : 제품을 만들고 싶은 객체
- Directer : 제품을 생산하기 위한 Builder를 가지고, Client의 요청에 따라 Builder에게 전달하는 객체
- Builder : 제품을 생산하는 인터페이스를 가지고 있는 객체
- ConcreteBuilder : 종류별 제품의 생산 방법을 알고있는 객체
- Product : 제품 객체
이 구조를 사용한 흐름은 아래와 같다.
- Client가 Directer에게 Product 생산을 요청한다.
- Directer는 자신이 가지고 있는 Builder에게 제품 생산을 요청한다.
- Builder는 Builder의 서브클래스에 구현된 BuildPart 함수들을 사용해 알맞은 부품들로 조합된 Product를 생산한다.
- 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 |