Definition
추상 팩토리 패턴(Abstract Factory Pattern)은 구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공한다. 구상 클래스는 서브클래스에서 만든다.
- Creational Patterns
Situation
- 객체 생성은 이를 활용하는 시스템과 독립적이어야 한다.
- 시스템은 여러 객체 패밀리를 사용할 수 있어야 한다.
- Concreate 클래스는 client에서 분리되어야 한다.
- 시스템은 제품이 생성, 구성, 및 표현되는 방식과 독립적이어야 한다.
- 클래스는 생성해야 하는 객체의 클래스를 예측할 수 없다.
- 시스템은 제품들의 패밀리 세트 중 하나만 사용해야 한다.
- 관련 제품 객체 패밀리는 함께 사용되도록 디자인 되었으며, 제약 조건이 적용되어야 할 필요가 있다.
- 코드가 관련 제품의 다양한 제품군(family)과 함께 작동해야 하지만 해당 제품의 구체적인 클래스에 의존하고 싶지 않은 경우 Abstract Factory 패턴을 사용한다. 이러한 제품군은 사전에 알 수 없거나 단순히 미래의 확장성을 허용하기를 원할 수 있다.
Structure
Pros
- concrete 클래스 분리
- Factory는 부품 생성의 책임과 프로세스를 캡슐화 한다.
- 구현 클래스에서 클라이언트를 분리
- 제품군을 쉽게 교환
- Concreate factory는 인스턴스화 할 때 한번 나타난다.
- Factory에서 받는 제품이 서로 호환되는지 확인할 수 있다.
- 구제적인 제품과 클라이언트 코드 간의 긴밀한 결합을 피한다.
- 단일 책임 원칙. 제품 생성 코드를 한 곳으로 추출하여 코드를 더 쉽게 지원할 수 있다.
- 개방/폐쇄 원칙. 기존 클라이언트 코드를 손상시키지 않고 제품의 새로운 변형을 도입할 수 있다.
Cons
- 많은 새로운 인터페이스와 클래스가 패턴과 함께 도입되기 때문에 코드가 생각보다 복잡해질 수 있다.
- 새로운 종류의 제품을 지원하는 것이 어렵다.
- 새롭게 생성되는 제품은 추상 팩토리가 생성할 수 있는 제품 집합에만 고정되어 있기 때문이다. 만약 새로운 종류의 제품이 등장하면 팩토리의 구현을 변경해야 한다. 이는 추상 팩토리와 모든 서브클래스의 변경을 가져온다.
비슷한 패턴
Abstract Factory vs Factory method
- Abstract Factory 패턴은 Factory 패턴보다 한 단계 높은 추상화 수준이다.
- 객체 인스턴스화의 책임을 다른 객체나 클래스에 위임하거나 연기한다.
- Abstract Factory 패턴은 컴포지션을 사용한다.
- Factory Method 패턴은 상속을 사용한다.
- Abstract Factory 클래스는 Factory Method로 구현되는 경우가 많지만 Prototype을 사용하여 구현할 수도 있다.
- Abstract Factory는 플랫폼별 클래스를 숨기기위해, 하위 시스템 객체가 클라이언트 코드에서 생성되는 방식만 숨기고 싶을 때 Facade의 대안으로 사용될 수 있다.
- 많은 디자인은 Factory Method(덜 복잡하고 하위 클래스를 통해 사용자 정의 가능)를 사용하여 시작하여, Abstract Factory, Prototype 또는 Builder(더 유연하지만 더 복잡함)로 발전한다.
- Builder는 복잡한 객체를 단계별로 구성하는 데 중점을 둔다. Abstract Factory는 관련 객체의 패밀리 생성을 전문으로 한다. Abstract Factory는 제품을 즉시 반환하지만 Builder는 사용하면 제품을 가져오기 전에 몇 가지 추가 구성 단계를 실행할 수 있다.
- Bridge와 함께 Abstract Factory를 사용할 수 있다. 이 조합은 Bridge에서 정의한 일부 추상화가 특정 구현에서만 작동할 수 있는 경우에 유용하다. 이 경우 Abstract Factory는 이러한 관계를 캡슐화하고 클라이언트 코드에서 복잡성을 숨길 수 있다.
- Abstract Factory, Builder와 Prototype은 모두 Singleton으로 구현될 수 있다.
헤드퍼스트 디자인 패턴 개정판 - 에릭프러먼, 엘리자베스 롭슨
https://refactoring.guru/design-patterns/abstract-factory
'Design Pattern' 카테고리의 다른 글
[Design Pattern] 커맨드 패턴(Command Pattern)에 대해 알아보자 (0) | 2022.07.04 |
---|---|
[Design Pattern] 싱글턴 패턴(Single Pattern)에 대해 알아보자 (1) | 2022.06.26 |
[Design Pattern] 팩토리 메소드 패턴(Factory Method Pattern)에 대해 알아보자 (0) | 2022.06.23 |
[Design Pattern] 데코레이터 패턴(Decorator Pattern)에 대해 알아보자 (0) | 2022.06.23 |
[Design Pattern] 옵저버 패턴(Observer Pattern)에 대해 알아보자 (0) | 2022.06.21 |
댓글