Factory of Factories
👉 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이들 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴을 말한다. 즉, 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다. 이를 사용하여 상황에 알맞은 객체를 생성할 수 있다.
대표적인 예로, 자바 프로그래밍 언어의 GUI 구성 요소인 AWT/Swing 라이브러리의 룩 앤드 필 변경 기능을 들 수 있다. 메탈, 마이크로소프트 윈도우, 맥 OS 등의 모양으로 변경할 수 있다. 이에 따라 추상 팩토리에 있는 기본 팩토리 객체가 변경된다. 그러면 이후로 생성되는 GUI 객체들은 전부 해당 룩앤필에 따른다.
구성요소 | 역할 |
---|---|
AbstractFactory | 팩토리의 공통 인터페이스를 정의 각 product를 생성하는 기능을 추상 메소드로 선언 |
ConcreteFactory | AbstractFactory 공통 인터페이스 구현 AbstractFactory 클래스의 추상 메소드를 구현함으로써 구체적인 제품 생성 |
AbstractProduct | Product의 공통 인터페이스 정의 |
ConcreteProduct | AbstractProduct 공통 인터페이스 구현 ConcreteFactory 클래스에서 생성되는 구체적인 제품 |
Client | AbstractFactory와 AbstractProduct의 공통 인터페이스만 사용해서 일을 수행 |
추상 팩토리 패턴은 다음과 같은 상황일 때 사용하면 효과적이다.
시스템과 객체를 생성하는 방식을 분리하고자 할 때
여러 제품군 중 하나를 선택해서 시스템을 설정해야 하고, 다른 제품군으로 대체 가능할 때
관련된 제품 객체들을 함께 사용하도록 설계했고, 이 제약이 외부에도 지켜지도록 하고 싶을 때
제품에 대한 클래스 라이브러리를 제공하고, 구현부는 숨기고 인터페이스를 노출시키고 싶을 때
구현(Implements)보다 인터페이스(Interface)를 위한 코드 접근법을 제공한다.
추후에 sub class를 확장하는 데 있어 굉장히 쉽게할 수 있다.
팩토리 패턴(팩토리 메소드 패턴)의 조건문(if-else, switch 등)으로부터 벗어난다.