본문 바로가기

Design Patterns

Factory Method Pattern ② 팩토리를 패턴으로!

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
일단 객체를 생성하는 클래스라는 명목으로 팩토리 클래스에 대해서 배웠는데.. 그럼 패턴은 어디있는 것일까.. -_-;
먼저 이전에 보이던 다이어그램을 살펴보면 유닛을 생산하는(객체를 생성하는) 팩토리가 단 한개 뿐입니다. 게이트웨이에서만 유닛을 생산하지는 않죠. (스타에서 -_-;;)

게이트웨이 이 외에도 로보틱스 퍼실리티도 있고, 스타게이트도 있으니 추가를 시켜 줘야겠군요. 그러면 프로토스 유닛의 서브클래스들도 많아 지겠구요..

일단 책에서는 팩토리 메소드 패턴을 공식적으로 이렇게 말하고 있습니다.

팩터리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이죠.
또 알아듣기 힘들군요 -_-; 일단 '인터페이스'와 '서브클래스에서 결정' 이런 키워드는 이전 패턴에서도 자주 언급 되었던 내용들입니다. 이해하기 위해서 또한 다이어그램을 보시면서 놀아보시겠습니다.

사용자 삽입 이미지

일단 Client 클래스는 접어두고, Abstraction 클래스와 Product 클래스를 보시겠습니다. Abstraction 클래스에서는 이를 상속받을 서브 클래스를 통해서 makeObject() 메소드를 구현하도록 해놨습니다. 따라서 서브클래스에서 결정한다는 얘기가 이 얘기인거 같군요. Product 클래스는 만들어질 객체의 모태가 되는 클래스가 되겠죠.



사용자 삽입 이미지

이건 제가 만든 팩토리 패턴을 사용한 클래스 다이어그램입니다. 스타크래프트를 이용해서 만들었습니다 -ㅅ-;; 이전에 만들었던 코드에는 GatewayFactory만 존재 했는데.. 앞에서 두었던 조건들을 충족시키려면 Stargate, Robotics 팩토리 클래스가 또 있어야 겠죠.. 넥서스 팩토리에서 프로브도 생산해야되는데 일단 패스했습니다. -_-;
여튼 각각의 팩토리에서는 그 팩토리가 만들어야할 객체들을 생산해내는 역할을 하는것이죠 ^^

다시 정리해서 말하자면, 어떤 서브 팩토리 클래스를 사용하느냐에 따라서, 생산되는 객체의 인스턴스가 결정이 된다는 거지요.

팩토리 패턴을 공부하는 과정은 생각보다 간단했습니다만, 앞으로 어떻게 잘 사용해야하는지 궁금하네요.