디자인패턴 Factory Method(팩토리 메소드) 패턴

황제낙엽 2007.11.25 11:30 조회 수 : 178 추천:94

sitelink1 http://blog.naver.com/gamediz/20040402918 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

1.    Factory Method(팩토리 메소드) 패턴

1)     정의

객체를 생성하는 인터페이스를 정의하지만, 인스턴스를 만들 클래스의 결정은 서브 클래스가 한다. Factory Method 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브클래스로 미룬다.

 

팩토리를 메소드를 쉽게 정의 하자면 ‘데이터를 가공만 한다’ 이다.

이 말은 가공하는 생산라인을 변경하여 다른 것을 생산하는 게 가능하다는 의미로 추상

팩토리를 설명할 때 썼던 표3의 공장 그 자체가 팩토리 메소드 라고 할 수 있다.

 

가상 팩토리가 여러 개의 인터페이스(재료들…)가 필요하다면 팩토리 메소드는 공장이라는 단 하나의 인터페이스만 가지고 있으며, 팩토리 메소드 입장에서는 재료가 무엇이 들어오든 결과물을 만들어 내는 형태로 구현된다.

 

2)     예제

팩토리 메소드 역시 위의 정의를 가지고는 이해하기가 그다지 쉽지 않다.

아래에 예로 든 표를 보면서 조금 쉽게 풀어보자.

 

npea1_gamediz.jpg

위에 표4는 사실 표3과 구조가 같다.

4는 빌더 패턴까지 함께 설명하기 위한 녀석이고, 3,4에 추상 팩토리, 팩토리 메소드, 빌더 패턴이 모두 들어가 있다.

 

어쨌든 팩토리 메소드에 대해 조금 더 설명하자면

팩토리 메소드는 위의 점선이 쳐진 사각박스안에 있는 공장 그 자체를 의미한다. 다만 추상 팩토리 처럼 재료를 여러가지 쓰는 게 아니라 공장내에 여러가지 제작라인이 존재하고, 그 제작라인은 재료를 받아 들여서 로봇이라는 완제품을 만들어 내는 것이다. 공장 입장에서는 재료가 어떤 녀석이 들어오는지 신경쓰지 않고 완제품을 만들어 내고, 다만 재료가 달라지면 만들 수 있는 완제품이 다른 녀석이 나오는 것이다.

이러한 팩토리 메소드의 성격이 사각 박스 정의에 나왔던 ‘Factory Method 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브클래스로 미룬다.’ 라는 말이다.

조금 다르게 말하면 팩토리 메소드는 굉장히 무심한 녀석이고 소극적인 일 처리자이다.

무슨 재료가 어떻게 들어올지는 잘 모르고 들어오는 재료를 가지고 제품을 만들긴 하되 제품이 어떤지에 대해서도 전혀 신경을 안 쓰는 능력은 좋은데 자기일만 묵묵히 처리하는 무뚝한 녀석이다.

 

팩토리 메소드는 기획에서 이런 형태로 활용할 수 있다.

기획에서 태권V의 능력치를 결정해야 할 때 완제품인 태권V의 능력치 하나에 대해서만 결정하게 되면, 추후에 깡통로봇, 청소로봇등이 추가 되었을 때 추가 될 때마다 능력치를 다시 설정해주어야 하는데, 팩토리 메소드를 사용하면 재료A, 재료B, 재료C의 능력치만 설정해주면 재료가 얼마나 들어가냐에 따라 자동으로 능력치를 계산해주기 때문에 초기에 조금만 노력을 들이면 추후에 관리에 있어서 편해지는 장점을 가지고 있다.