팩토리 패턴은 기본적으로 2개로 분류(Factory Method, Abstract Factory) 된다.
팩토리 메소드(Factory Method)는 객체를 생성하되 직접 객체의 생성자를 호출해서 객체를 생성하는 것이 아니라 대행 함수를 통해 간접적으로 객체를 생성하는 방식이다.
쉽게 말하면, 스타크래프트에서 배럭(클래스)에서 유닛(추상클래스)를 통해 마린, 파이어뱃, 메딕 등을 생성하게 된다.
소스코드
unit.h
barracks.h
main.cpp
위와 같이 배럭(클래스)에서는 상황에 따라 마린 또는 메딕등을 생성하지만 무엇이 생성되었는지는 알지 못해도 생성된 유닛을 사용하는데는 문제가 없다. 이렇듯 Factory에서 생성된 객체를 사용자는 종류에 신경쓰지 않고 생성된 객체를 똑같이 사용할 수 있다.
추상 팩토리(Abstract Factory)는 클래스의 객체를 전담 생성하는 클래스를 두지만, 새로운 제품군 생성을 추가하는 것이 쉽도록 클래스 상속을 도입하고 구체적인 제품군별 Factory 클래스 상위에 Abstract Base Class를 정의한 형태의 설계구조를 말한다.
쉽게 말하면 Factory Method의 확장 버전으로 Unit 뿐만이 아니라 Barracks도 Factory Method화 하는 것이다.
아래의 소스 코드에서 ISword는 Unit, ISwordFactory는 Factory의 추상화라고 생각하고 소스 코드를 보면 될 것 같다.
소스 코드
Sword.h
Factory.h
main.cpp
추상 팩토리 패턴에서 팩토리 클래스들의 각 멤버 함수들은 앞에서 언급한 팩토리 메서드(Factory Method) 패턴 형태로 구현되어 있으며 추상팩토리 패턴은 기본적으로 팩토리 메서드 패턴을 활용해서 구현한다.
단점은 새로운 객체가 추가 될때마다 새로운 팩토리 클래스를 정의하고 구현해야 하는 불편함을 초래하는데 이 부분을 해결하려면 객체를 종류별로 팩토리 클래스에 등록해두고 객체 생성 요청시 복제해주는 방식(프로토타입 패턴)을 사용한다.
또한 팩토리 객체를 하나만 두고 싶을 때는 싱글턴 패턴을 사용하면 된다.
출처 : http://blog.naver.com/sorkelf/40169734025, http://egloos.zum.com/ani2life/v/2887675
'Basic Programming > Design Pattern' 카테고리의 다른 글
Design Pattern - 컴포지트 패턴(Composite Pattern) (0) | 2017.09.08 |
---|---|
Design Pattern - 쓰레드에서 안전한 싱글턴 패턴(Thread-Safe Singleton Pattern) (0) | 2017.04.19 |
Design Pattern - 옵저버 패턴(Observer Pattern) (0) | 2017.02.18 |
Design Pattern - 핌플 이디엄(Pimpl Idiom) (0) | 2016.02.24 |
Design Pattern - 파사드 패턴(Facade Pattern) (0) | 2015.12.10 |