디자인패턴 Abstract Factory(추상 팩토리) 패턴

황제낙엽 2007.11.25 11:29 조회 수 : 68 추천:97

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

 

1.    Abstract Factory(추상 팩토리) 패턴

 

1)     정의

구체적인 클래스를 지정하지 않고, 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공한다.

 

추상 팩토리를 한마디로 정의 하자면 데이터를 추상화 한다이다.

풀어서 설명하자면 게임 세팅에 있어 내부 데이터를 인터페이스로부터 독립시키려는 패턴이라고 할 수 있다.

 

2)     예제

위의 설명이 잘 이해가 되는가? 아마도 이해가 잘 안될 것이다. 그렇다면 다음의 경우를 한번 보자.

 

[어느 공장장의 고민]

저는 재료를 가공해서 완성품을 만드는 공장의 사장이예요

저희 공장에서는 구리, , 금 등을 가공해서 장식용 구리검, 은검, 금검을 만들고 있지요

그런데 이번에 스테인레스로 검을 만들려고 재료를 늘렸는데 저희 공장 구조상 또 공장을 늘려야 해서 고민이 이만저만이 아니예요; 저희 공장이 이런 구조로 물건을 만들거든요

 

구리 -> [공장A] -> 구리검

-> [공장B] -> 은검

 

이런 형태로 만들다 보니 재료를 추가 할 때 마다. 공장을 새로 지어야 해서 고민이 이만 저만이 아니예요. 휴 어떻게 해결을 해야 할까요?

 

[어느 공장장의 고민…]을 보면 공장이 제품을 만들 때 해당 재료에 맞는 공장이 따로 존재해서 재료가 추가 될 때 마다 공장을 추가해야 하는 리소스가 많이 먹히는 방식을 사용하고 있다는 것을 알 수 있다.

 

그렇다면 이 공장장의 고민을 해결해주기 위해서 필요한 것은 무엇일까?

그 것은 공장과 재료를 분리해 내는 일이다.

아래의 그림을 보자.

 

npe18_gamediz.jpg

 

표3을 보면 하나의 공장이 있고 재료가 있다는 것을 볼 수 있다.

여기서 공장을 인터페이스, 재료를 데이터라고 규정할 수 있고, 인터페이스는 동일하되 재료를 무한으로 확장할 수 있다는 것을 알 수 있다. 공장장이 재료를 추가 할 때 마다 공장을 새로 지어야 하는 패턴에 비해 얼마나 확장성이 높은가?

이러한 패턴을 추상 팩토리 패턴이라고 한다.