본문 바로가기
개발/일반

팩토리 메소드 패턴 (factory method) 추상 팩토리 패턴 (abstract factory) 차이

by 로그인시러 2018. 1. 11.

이거 은근 볼 때마다 헷갈린다.


일단 내게 깨달음을 준 stackoverflow 를 보자.


The main difference between a "factory method" and an "abstract factory" is that the factory method is a single method, and an abstract factory is an object.


https://stackoverflow.com/questions/5739611/differences-between-abstract-factory-pattern-and-factory-method


정리하면,

'factory method' 는 single method 가 여러 종류의 객체 생성하는 것이고, 

'abstract factory' 는 object 별 한 종류의 객체를 생성하는데, 여러 객체를 생성해서 여러 종류의 객체를 생성하는 factory 효과를 나타내는 것이다.


이해가 안되면, 다음 factory method pattern 그림을 보자.




어디선가 퍼온 그림인데, 

위의 그림에서 NYPizzaStore 를 보면, CreatePizza() 함수가 NYCheesePizza, NYClamPizza 등을 모두 생산한다.


 위의 정리에서처럼 하나의 메소드가 여러종류의 Pizza 를 생성한다.


이건 이해가 됬을 테니, 다음 abstract factory 패턴에 대한 그림을 보자.




factory method 와 같은 예제이면 좋겠지만 그림이 없으므로 이거로라도 설명하겠다.


위의 노란색 ChicagoIngredientFactory 를 보자.

기본적으로 factory method 패턴 예제의 NYPizzaStore 와 다를바가 없다.

둘다 상위 interface 를 구현한다는 점에서 그러하다.


그러나 자세히보자. 

createDough() 메소드가 생성하는 객체는 ThinCrustDough 한 가지 종류이다.

NYPizzaStore 의 createPizza() 는 다양한 종류의 pizza 를 생성하는데 반해, 

여기서는 한가지 종류의 객체만 생성한다.


createSauce(), createCheese() 등 모두 마찬가지다.


그렇다면, 다시 위의 정리를 상기해보면, 

메소드가 아니라 factory object 별 한 종류의 객체를 생성한 것이다.


그런데 만일, 생성해야 할 객체가 한가지일 경우 factory object 별로 한종류의 객체를 생성하는것은 비효율적이다.


그래서, 보통 위의 그림과 같이 한 종류의 제품군을 생성할 때 유리하게 사용할 수 있는 패턴이다.


그렇게 factory object 를 추상화해서 추상 팩토리라 부르는 듯 허다.

'개발 > 일반' 카테고리의 다른 글

SecurityException: sealing violation  (0) 2017.09.13
intellij idea debug slow  (0) 2017.08.04
java posix regular expression  (0) 2017.07.24
redmine 위키 문법  (0) 2017.05.26
편리한 Junit 사용 moreunit  (0) 2017.04.20

댓글