Factory Pattern (팩토리 패턴)
Factory Pattern
모든 factory pattern에서는 app의 구상 클래스에 대한 dependency를 줄여줘서 loose-coupling을 도와준다. 또한 Object 생성을 encapsulation 한다. 주로, Super-class와 다수의 sub-class가 있을 때 input을 기준으로 하나의 sub-class를 반환할 경우 사용한다. 구상 class가 아닌 추상 class/interface에 맞춰서 코딩할 수 있게 해주는 강력한 기법이다.
● Simple Factory
디자인 패턴이라 할 수 없고, 자주 쓰이는 관용구라 할 수 있다. Client와 구상 class를 분리시키기 위한 간단한 기법으로 활용한다.
● Factory Method Pattern
Object를 생성하기 위한 Interface를 정의하는데, Object를 생성하는 부분을 Sub-Class에 위임하는 pattern이다. 즉 ‘new’키워드를 호출하는 부분을 Sub-Class에 위임하는 것이다. 그 결과, class간의 결합도(class의 변경이 있을 경우, 다른 class에 영향을 주는 정도)가 떨어진다. SimpleFactory와의 차이점은 Factory Method Pattern은 어떤 구현을 사용할지를 sub-class에서 결정하는 framework를 만들 수 있다는 것이다. SimpleFactory에서도 Object생성을 Encapsulation하는 방법을 사용하긴 하지만 생성하는 제품을 마음대로 변경할 수 없기 때문에 Factory Method Pattern처럼 강력한 flexibility를 제공하지는 못한다.
● Abstract Factory Pattern
Interface를 이용하여, 연관성이 있는 많은 sub-class를 특정 그룹으로 묶어 일괄적으로 수정할 수 있도록 하는 pattern이며, 제품을 추가하려면 Interface를 수정하면 된다. 예를 들어 특정 library를 배포하는데 국가마다 기능이 상이하다면 abstract factory pattern을 이용해서 일괄적으로 기능을 변경하여 대처할 수 있다.
● Dependency Inversion Principle
추상화된 것에 의존하도록 하고, 구상 클래스에 의존하지 않도록 해야 한다.
1. 어떤 변수에도 구상 클래스에 대한 reference를 지정하지 않는다(new 연산자를 사용하는 것이 reference를 사용하게 되는 것)
2. 구상 클래스에서 유도된 클래스를 만들지 않는다. (구상클래스에서 유도된 클래스를 만들면 특정 구상 클래스에 의존하게 된다. 추상화된 것을 사용해야 한다.)
3. 클래스에 이미 구현된 메소드를 override 하지 않는다. (이미 구현된 메소드를 override 한다는 것은 클래스가 제대로 abstract 되지 않았다고 할 수 있다. 클래스에 method를 정의할 때에는 모든 sub-class에서 공유할 수 있는 것으로 정의해야 한다.
구현
'SW > DesignPattern' 카테고리의 다른 글
Command Pattern (커맨드 패턴) (0) | 2017.09.07 |
---|---|
Singleton Pattern (싱글턴 패턴) (0) | 2017.09.05 |
Decorator Pattern (데코레이터 패턴) (0) | 2017.09.05 |
Observer Pattern (옵저버 패턴) (0) | 2017.09.05 |
Strategy Pattern (스트레테지 패턴) (0) | 2017.09.05 |