본문 바로가기

💻 개발IT/Design Patterns

4. Creational 패턴 - Abstract Factory Method Pattern

UI Toolkit 예제

Windows os, mac os, motif style의 다양한 UI toolkit을 만든다고 가정해보자.

UI toolkit은 다양한 위젯들(scroll bars, windows, buttons 등)을 가지고 있다. 

Factory method pattern에서는 Client 밑에 바로 concrete한 수준이었지만

Abstract Factory Method Pattern은 한 단계 더 추상화를 한다.

 

만약 Client 밑에 바로 concrete class가 오게 되면

UI style별로 위젯을 변경할 때 수정할 코드가 많아진다.

 

 

 

Client에서 생성 부분(createDialogWindow)은 widgetFactory에게 위임한다.

Style을 변경하고 싶으면 빨간 글씨 WinXPWidgetFactory()만 수정하면 된다.

 

 

Pizza 예제

4. Creational 패턴 - Factory Method Pattern

Factory Method 패턴에서 사용한 피자 예제를 Abstract Factory Method Pattern으로 변경하면,

피자 재료를 Product로 보아 PizzaIngredientFactory interface를 생성한다.

 

PizzaStore는 Factory Method 패턴을 이용해서 생성해준다.

피자를 생성하면서 ingredient 생성부분은 Abstract Factory Method 패턴을 이용해서 생성한다. (4~5)

 

 

Abstract Factory Method Pattern

factory object에게 생성을 delegate한다.

client는 abstractFactory, abstractProduct에만 접근(Interface만 사용)하여 concrete class들이 변경되어도 client 코드에 영향을 주지 않는다.

 

product가 여러 그룹으로 만들어질 때(피자 재료들, UI 위젯들 등) 사용한다.

특정한 테마를 만족하는 object 집합의 개념일 때 사용한다.

 

장점

concrete class 독립할 수 있다. 

Product 집합들을 테마에 따라 변환하는 것이 손쉽다.

factory class 추가는 간단한다.

 

 

단점

product의 새로운 종류가 나오면 상당한 수정이 필요하다.

 

예시)

만약 radio button을 추가하려면, GUIFactory와 각 Factory class 모두 수정해야한다.

 

Factory method pattern 차이

factory method 패턴보다 추상화 단계가 높고 상속이 아닌 composition & delegation을 이용한다.

또한 factory method 패턴은 class scope에 속하고 abstract Factory method 패턴은 object scope에 속한다.

 

 

 

반응형