팩토리 메서드는 제품의 모르는 서브클래스를 생산하는 메서드입니다.
클래스 구조
일반적인 클래스 구조는 아래와 같습니다.
여기 등장하는 참여자들을 알아봅시다.
- Product : 제품 추상 클래스 입니다. 팩토리 메서드가 생성하는 객체의 인터페이스 입니다.
- ConcreteProduct : Product 인터페이스를 실제로 구현합니다. 다양한 제품의 종류에 따라 정의함.
- Creator : 팩토리 메서드를 선언하는 클래스 입니다. 기본적인 팩토리 메서드를 구현하는 경우도 있고, 그냥 추상 메서드로 남기고 서브클래스에게 구현을 맡기는 경우도 있습니다. 팩토리 메서드를 호출합니다.
- ConcreteCreator : 다양한 제품의 종류에 따라 각 제품을 생산하도록 팩토리 메서드를 재정의한 클래스 입니다.
구현 방식
기본적인 구현 방식은 단순히 FactoryMethod() 에서 return new ConcreteProduct; 를 하는 것입니다.
Creator가 구체 클레스가 될 수도, 그냥 추상 클래스가 될 수도 있습니다.
제품의 종류가 늘어남에 따라 Product와 Creator의 서브클래스가 무한정 늘어나는 문제가 있을 수 있습니다. 이런 경우 C++의 템플릿을 사용하여 해결할 수 있습니다. Creator의 서브클래스에 ConcreteProduct를 템플릿으로 넘겨주는 식입니다.
FactoryMethod에 제품의 종류를 매개변수로 넘겨주는 식으로 구현할 수도 있습니다. 이렇게 할 경우 장점은 Creator의 서브클래스를 만들지 않아도 됩니다.
미로를 생성하는 예제를 알아봅시다.
구조도가 지저분해서 죄송합니다. 위의 일반화된 구조도랑 거의 같으나, 제품의 종류가 많아짐에 따라 복잡해졌습니다.
이처럼 Product 서브클래스 갯수와 Creator 서브클래스 갯수가 비슷해지는 경향이 있습니다. 즉 두 개의 병렬적인 클래스 계통이 존재하게 됩니다. 반대로 말하면, 팩토리 메서드 패턴이 두 개의 병렬적인 클래스 계통을 연결하는 역할을 할 수도 있습니다.
'GOF의 DesignPattern' 카테고리의 다른 글
장식자 패턴 (0) | 2023.09.09 |
---|---|
3장 빌더 패턴 (0) | 2023.03.01 |
3장. 생성 패턴 & 추상 팩토리 패턴 (0) | 2023.02.27 |
2장 사례 연구: 문서 편집기 설계 (0) | 2023.02.25 |
1장 서론. (0) | 2023.02.07 |