디자인 패턴의 목적 중에 생성에 해당하는 다양한 패턴들 중에
팩토리 메서드 ( Factory Method )와 추상 팩토리 ( Abstract Factory ) 패턴은 언뜻 보면 비슷해 보인다.
그래서 정확히 각각의 패턴의 차이점이 무엇인지 알아보도록 하자.
먼저 각 패턴의 정의를 알아보자.
Factory Method Pattern
부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
Abstract Factory Pattern
인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성
다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다.
이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.
Abstract Factory VS Factory Method
팩토리 메서드 | 추상 팩토리 | |
결합도를 낮추는 대상 | 클라이언트 코드와 인스턴스를 만들어야 할 구상 클래스를 분리시켜야 할때 사용 어떤 구상 클래스를 필요로 하게 될지 미리 알 수 없는 경우 사용 ( ConcreteProduct <-> Client ) |
클라이언트에서 서로 연관된 일연의 제품들을 만들어야 할때 사용 ( ConcreteFactory <-> Client ) |
Factory 클래스에서 객체 생성 지원 범위 | 한 팩토리당 한 종류 ( create 메서드가 Factory 클래스에 1개) |
한 팩토리에서 서로 연관된 여러 종류 모두 지원 ( create() 메서드가 팩토리 클래스에 여러 개) |
사용 목적 | 클라이언트 코드와 인스턴스를 만들어야 할 구상 클래스를 분리시켜야 할때 사용 어떤 구상 클래스를 필요로 하게 될지 미리 알 수 없는 경우 사용 |
클라이언트에서 서로 연관된 일연의 제품들을 만들어야 할때 사용 |
위의 내용들을 이해한 내용을 나만의 용어로 정리해 보면
팩토리 메서드 패턴은
사용자 코드와 concrete product와의 결합도를 낮추기 위해서 그 사이에 factory를 제공하는 것
실제 어떤 product를 사용자에게 넘겨줄지는 concrete factory가 결정한다.
( 추가적으로 template 패턴이 조합되어 product를 생성하기 위한 일렬의 과정을 상위 factory를 통해 공통화할 수 있다. )
추상 팩토리 패턴은
팩토리 메서드의 확장판으로 객체의 집합을 생성 할 때 사용한다.
해당 팩토리를 통해 생성해야할 concrete product의 종류가 여러 가지 일 때 객체의 집합 별로 묶어서 생성할 수 있도록 도와준다.
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Prototype Pattern ( 프로토타입 패턴 ) (0) | 2021.05.24 |
---|---|
[DesignPattern] Builder Pattern ( 빌더 패턴 ) (0) | 2021.05.21 |
[DesignPattern] Abstract Factory Pattern ( 추상 팩토리 패턴 ) (0) | 2021.05.13 |
[DesignPattern] Singleton Pattern ( 싱글턴 패턴 ) (0) | 2021.05.12 |
[DesignPattern] Factory Method Pattern ( 팩토리 메소드 패턴 ) (0) | 2021.05.12 |