디자인패턴

추상 팩토리 & 팩토리 메서드 패턴 & 팩토리 패턴 정의

JUNGKEUNG 2022. 6. 19. 20:19
반응형

팩토리 패턴이란?

클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 한다는 것이다.

즉, new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이 줄어든다는 이점을 얻을 수 있다.

 

팩토리 패턴에는 2가지 종류가 있다.

  • 팩토리 메서드 패턴
  • 추상 팩토리 패턴

 

 

팩토리 메서드 패턴

  • 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 서브클래스(팩토리)로 위임하는 패턴
  • 객체를 생성해서 반환하는 것을 말한다. 즉, 결과값이 객체인 것이다
  • 팩토리는 인터페이스로 추상화되어 구체 팩토리의 변경을 유연하게 한다.
  • 클라이언트는 결과적으로 어떤 객체가 생성될 것인지 알 필요가 없는 것이 특징이다.

 

 

추상 팩토리 패턴

  • 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
  • 추상화된 팩토리를 이용하여 특정 그룹의 요소 객체들을 생성 할 수 있는 메서드를 정의
  • 추상화 팩토리를 구현한 구체 클래스는, 구체 클래스의 특성에 따라 구체화된 요소 객체들을 반환하도록 구현
  • 팩토리와 요소 객체들을 추상화하여 클라이언트와의 결합을 느슨하게 한다.

 

 

팩토리 메서드 패턴과 추상 팩토리 패턴의 공통점

  • Template Method Pattern을 사용
  • Factory 클래스를 사용해서 생성
  • Factory Method Pattern을 사용
  • 둘 다 추상화 클래스와 Factory를 통해 실제 구현 대상인 Concrete(구상 클래스, 구체 클래스)와 client 간 결합도를 낮찬다.
  • 추상 팩토리 팩턴은 Factory Method Pattern을 사용한다. 그리고 팩토리 메서드 패턴의 단점을 보완한다.
  • 객체 생성을 캡슐화
  • 구상 클래스가 아닌, 추상 클래스와 인터페이스에 맞춰 코딩이 가능하다.

 

 

팩토리 메소드 패턴과 추상 팩토리 패턴의 차이점

1.Factory 클래스에서 객체에 대한 생성을 지원하는 범위

  • 팩토리 메소드 패턴
    • 한 팩토리당 한 종류 (create 메서드가 Factory 클래스에 1개)
    • 한 개의 메서드로 여러 개의 객체를 만듦
  • 추상 팩토리 패턴
    • 한 팩토리에서 서로 연관된 여러 종류 모두 지원 (create() 메서드가 팩토리 클래스에 여러 개)
    • 구현 클래스에 의존하지 않고 여러 개의 관련된 객체를 하나의 팩토리로 묶음

 

2. 팩토리 메서드에서 만드는 객체의 종류

  • 팩토리 메소드 패턴의 팩토리 메서드
    • 인자에 따라 객체의 종류가 결정 된다
  • 추상 팩토리 패턴 패턴의 팩토리 메서드
    • 인자에 따라 관련된 객체들을 생성하는 팩토리의 종류가 결정됨

 

3. 결합도를 낮추는 대상

  • 팩토리 메서드 패턴 
  • ConcreteProduct와  Client 간의 결합도를 낮출 때 사용
  • 추상 팩토리 패턴
  • ConcreteFactory와 Client간의 결합도를 낮출 때 사용

 

4. 포커스

  • 팩토리 메서드 패턴
    • 메서드(Factory Method) 레벨에서 포커스를 맞춤
    • 클라이언트의 ConcreteProduct 인스턴스 생성 및 구성에 대한 책임을 덜어줌
  • 추상 팩토리 패턴
    • 클래스(Abstract Factory) 레벨에서 포커스를 맞춤
    • 각 Product들이 다른 클래스와 함께 사용될 때의 제약사항을 강제할 수 있다.
    • 단, 새로운 ConcreteFactory를 추가할 때 많은 작업이 필요하다.

 

5. 메서드와 오브젝트

  • 팩토리 메서드는 단일 Method이다
  • 추상 팩토리는 Object이다. (팩토리 오브젝트 생성)

 

6. Inhritance(상속), Composition(구성)

  • 팩토리 메서드 패턴
    • 상속을 사용하여 객체의 인스턴스 생성에 대해서는 서브클래스에 의존
    • 지역 레퍼런스 없이 바로 하위 클래스의 함수를 호출하여 객체를 만듦
  • 추상 팩토리 패턴
    • 지역 레퍼런스를 두어 , 외부로부터 Factory 객체를 DI 받아서 위임.

 

 

Sciprt


팩토리 메서드 패턴은 각각 다른 객체들이 필요할 때 사용하며, 추상 팩토리 패턴은 서로 연관 있는 객체들의 조합이 필요할 때 사용한다.

 

 

 

 

참고 자료


https://beomseok95.tistory.com/246

https://fvor001.tistory.com/63

 

 

 

 

'디자인패턴' 카테고리의 다른 글

컴포짓(composite) 패턴  (0) 2022.07.30
브릿지(Bridge)패턴  (0) 2022.07.20
프로토타입(Prototype) 패턴  (0) 2022.07.08
팩토리 메소드 패턴(Factory Method Pattern)  (0) 2022.06.11
싱글톤 패턴(singleton pattern)  (0) 2022.06.04