이거 은근 볼 때마다 헷갈린다.
일단 내게 깨달음을 준 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.
정리하면,
'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 |
댓글