GoF 디자인패턴/생성 패턴
추상 팩토리(Abstract Factory)
g*g
2023. 12. 31. 15:34
구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴
- 먼저 만들어야할 컴포넌트들을 추상적으로 정하고 구체적인 조건이 주어지면 조건에 맞는 구체적인 컴포넌트들을 생성하는 패턴
- 구체적인 컴포넌트들을 생성해 조립해서 하나의 시스템을 만드는 패턴
의도
상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공
활용성
- 객체가 생성되거나 구성/표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할 때
- 여러 제품군 중 하나를 선택해서 시스템을 설정해야하고 한번 구성한 제품을 다른것으로 대체할 수 있을 때
- 관련된 제품 객체들이 함께 사용되도록 설계되었고, 이 부분에 대한 제약이 외부에도 지켜지도록 하고 싶을 때
- 제품에 대한 클래스 라이브러리를 제공하고, 그들의 구현이 아닌 인터페이스를 노출시키고 싶을 때
구조
참여자
- AbstractFactory: 개념적 제품에 대한 객체를 생성하는 연산으로 인터페이스를 정의한다.
- ConcreateFactory: 구체적인 제품에 대한 객체를 생성하는 연산을 구현한다.
- AbstractProduct: 개념적 제품 객체에 대한 인터페이스를 정의한다.
- ConcreateProduct: 구체적으로 팩토리가 생성할 객체를 정의하고, AbstractProduct가 정의하고 있는 인터페이스를 구현한다.
- Client: AbstractFactory 와 AbstractProduct 클래스에 선언된 인터페이스를 사용한다.
결과(장단점)
- 구체적인 클래스를 분리한다.
- 재품군을 쉽게 대체할 수 있도록 한다.
- 제품 사이의 일관성을 증진시킨다.
- 새로운 종류의 제품을 제공하기 어렵다.(생성되는 제품은 추상팩토리가 생성할 수 이는 제품집합에만 고정되어 있기 때문이다. 새로운 종류의 제품이 등장하면 팩토리의 구현을 변경해야한다. 즉, 기존 연산의 반환 객체 타입이 변경되었으므로, 상속받는 서브클래스 모두 변경되어야 한다.)
구현
- 팩토리를 단일체로 정리
- 제품을 생성
- 확장 가능한 팩토리들을 정의
출처
- GoF의 디자인 패턴 개정판
- 유튜브 GIS DEVELOPER -TypeScript로 보는 GoF의 디자인패턴: 22. Abstract Factory