GoF 디자인패턴/생성 패턴

추상 팩토리(Abstract Factory)

g*g 2023. 12. 31. 15:34

구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴

  • 먼저 만들어야할 컴포넌트들을 추상적으로 정하고 구체적인 조건이 주어지면 조건에 맞는 구체적인 컴포넌트들을 생성하는 패턴
  • 구체적인 컴포넌트들을 생성해 조립해서 하나의 시스템을 만드는 패턴

 

의도

상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공
 
 

활용성

  • 객체가 생성되거나 구성/표현되는 방식과 무관하게 시스템을 독립적으로 만들고자 할 때
  • 여러 제품군 중 하나를 선택해서 시스템을 설정해야하고 한번 구성한 제품을 다른것으로 대체할 수 있을 때
  • 관련된 제품 객체들이 함께 사용되도록 설계되었고, 이 부분에 대한 제약이 외부에도 지켜지도록 하고 싶을 때
  • 제품에 대한 클래스 라이브러리를 제공하고, 그들의 구현이 아닌 인터페이스를 노출시키고 싶을 때

 
구조

 


참여자

  • AbstractFactory: 개념적 제품에 대한 객체를 생성하는 연산으로 인터페이스를 정의한다.
  • ConcreateFactory: 구체적인 제품에 대한 객체를 생성하는 연산을 구현한다. 
  • AbstractProduct: 개념적 제품 객체에 대한 인터페이스를 정의한다. 
  • ConcreateProduct: 구체적으로 팩토리가 생성할 객체를 정의하고, AbstractProduct가 정의하고 있는 인터페이스를 구현한다. 
  • Client: AbstractFactory 와 AbstractProduct 클래스에 선언된 인터페이스를 사용한다.


 
결과(장단점)

  1. 구체적인 클래스를 분리한다. 
  2. 재품군을 쉽게 대체할 수 있도록 한다.
  3. 제품 사이의 일관성을 증진시킨다.
  4. 새로운 종류의 제품을 제공하기 어렵다.(생성되는 제품은 추상팩토리가 생성할 수 이는 제품집합에만 고정되어 있기 때문이다. 새로운 종류의 제품이 등장하면 팩토리의 구현을 변경해야한다. 즉, 기존 연산의 반환 객체 타입이 변경되었으므로, 상속받는 서브클래스 모두 변경되어야 한다.)

구현

  1. 팩토리를 단일체로 정리
  2. 제품을 생성
  3. 확장 가능한 팩토리들을 정의

 

 

출처

- GoF의 디자인 패턴 개정판

- 유튜브 GIS DEVELOPER -TypeScript로 보는 GoF의 디자인패턴: 22. Abstract Factory

https://youtu.be/Xx0dM517HYs?si=XvRKy3fq-USGu5Ie