추상 팩토리

연어는결국강으로·2022년 10월 1일
0

GoF 디자인 패턴

목록 보기
1/18

1. 의도

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


2. 활용성

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

3. 구조


4. 구성요소

  • AbstractFactory

    개념적 제품에 대한 객체를 생성하는 연산으로 인터페이스를 정의

  • ConcreteFactory

    구체적인 제품에 대한 객체를 생성하는 연산을 구현

  • AbstractProduct

    개념적 제품 객체에 대한 인터페이스를 정의

  • ConcreteProduct

    구체적으로 팩토리가 생성할 객체를 정의하고, AbstractProduct가 정의하는 인터페이스를 구현

  • Client

    AbstratFactory와 AbstractProduct 클래스에 선언된 인터페이스를 사용


5. 협력방법

  • 일반적으로 런타임동안 ConcreteFactory 클래스의 인스턴스 하나가 만들어짐
  • 어떤 특정 구현을 갖는 제품 객체를 생성
  • 서로 다른 제품 객체를 생성하는 경우
    • 사용자는 서로 다른 구체 팩토리를 사용해야함
  • AbstractFactory는 필요한 제품 객체를 생성하느 책임을 ConcreteFactory 서브 클래스에 위임한다.

6. 결과

  • 이익

    • 구체적인 클래스를 분리한다.

      • 추상 팩토리 패턴을 쓰면 응용 프로그램이 생성할 객체의 클래스를 제어할 수 있다.
      • 제품 객체를 생성하는 과정과 책임을 캡슐화한 것이기 때문에, 구체적인 구현 클래스가 사용자에게서 분리된다.
      • 일반 프로그램은 추상 인터페이스를 통해서만 인스턴스를 조작한다.
      • 제품 클래스 이름이 구체 팩토리의 구현에서 분리되므로, 사용자 코드에는 나타나지 않는다.
    • 제품군을 쉽게 대체할 수 있다.

      • 응용 프로글매에서 한 번만 나타나기 때문에 응용 프로그램이 사용할 구체 팩토리를 변경하기는 쉽다.
      • 구체 팩토리(ConcreteFactory)를 변경함으로써 응용프로그램은 서로 다른 제품을 사용할 수 있게 변경된다.
      • 추상 팩토리는 필요한 모든 것을 생성하기 때문에 전체 제품군은 한번에 변경이 가능하다.
    • 제품 사이의 일관성을 증진시킨다.

      • 하나의 군 안에 속한 제품 객체들이 함께 동작하도록 설계되어 있을 때, 응용 프로그램은 한번에 오직 한 군에서 객체를 사용하도록 함으로써 프로그램의 일관성을 갖도록 해야한다.
      • 추상팩토리는 이 점을 아주 쉽게 보장할 수 있다.
    • 새로운 종류의 제품을 제공하기 어렵다.

      • 새로운 종류의 제품이 등장하면 팩토리의 구현을 변경해야한다.
      • 이는 추상 팩토리와 모든 서브클래스의 변경을 가져온다.
      • 즉, 인터페이스가 변경되는 새로운 제품을 생성하는 연산이 추가되거나, 기존 연산의 반환 객체 타입이 변경되었으므로, 이를 상속받는 서브클래스 모두 변경되어야 한다.

7. 구현

0개의 댓글