본문 바로가기
Design Pattern

[Design Pattern] 추상 팩토리 패턴(Abstract Factory Pattern)에 대해 알아보자

by 개발자J의일상 2022. 6. 24.
반응형

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, BuilderPrototype은 모두 Singleton으로 구현될 수 있다.

 

헤드퍼스트 디자인 패턴 개정판 - 에릭프러먼, 엘리자베스 롭슨
https://refactoring.guru/design-patterns/abstract-factory

 

300x250

댓글