Facade Pattern (퍼사드 패턴)

Facade Pattern


 

정의


어떤 sub-systeminterface에 대한 통합된 interface를 제공하고 facade에서 고수준 interface를 정의하기 때문에 sub-system을 쉽게 사용할 수 있다.



 

장점


더욱 더 간단한 interface를 만들 수 있다는 것이다


또한 client부와 sub-system을 분리할 수도 있다


만약 clientfacade로 만들었다고 하면 interface가 달라졌을 때 client는 변경할 필요 없이 facade만 변경하면 된다


그리고 표면에 드러나 있는 interface를 사용하고 그 내부는 알 필요가 없다.


 

l  최소지식원칙(=Law of Demeter)


system design에 있어서 어떤 object든 그 object와 상호작용하는 class의 수에 주의해야 하며, object들과 어떤 식으로 상호작용하는지도 주의해야 한다는 원칙이다.


위 원칙을 지키기 위해서는 4 종류의 object method만 호출하면 되는데, 다음과 같다.


1.    객체 자체


2.    Methodparameter로 전달된 object


3.    method에서 생성하거나 instance를 만든 object


4.    object에 속하는 구성요소 (A has B)




Adapter Pattern, Facade Pattern, Decorator Pattern의 차이점


l  Adapter Pattern : interface를 다른 interface로 변환하는 것이다. Interface를 변경해서 client에서 필요로 하는 interface로 적응시키는 위한 용도로 호환성을 위한다.


l  Facade Pattern : interface를 간단하게 바꾸는 것으로, 어떤 sub-system에 대한 간단한 interface를 제공하기 위한 용도로 사용되며 간편할 때 사용한다.


l  Decorator Pattern : interface를 바꾸지 않고 기능만 추가하는 것으로 Object를 감싸서 새로운 기능을 추가하기 위해서 사용한다.



 

정리


1.    기존 class를 사용하려고 하는데 interface가 맞지 않으면 adapter pattern을 사용한다.


2.    interface 또는 여러 interface를 단순화 시키거나 통합시켜야 한다면 facade pattern을 사용한다.


3.    Adapter Patterninterfaceclient가 원하는 interface로 바꾸는 역할을 하고 Facade Pattern은 복잡한 sub-system과 분리하는 역할을 한다.


4.    Adapter Pattern은 다중 Adapter로 만들 수 있고 Façade Pattern은 한 sub-system에 여러 개 만들 수 있다.

Decorator Pattern (데코레이터 패턴)

Decorator Pattern

 

정의

상속 또는 interface 이용하여 Type 맞춰 객체의 추가적인 요건을 동적으로 추가한다. 서브클래스(decorator class) 만드는 것을 통해서 기능을 유연하게 확장할 있는 방법을 제시한다. 중요한점은 Decorator 상속을 통해서 행동을 물려받는 것이 목적이 아니라는 것이다.

 


구성

1.    구성요소는 직접 쓰일 수도 있고 decorator 감싸져서 쓰일 있다.

2.    ConcreteComponent 새로운 행동을 동적으로 추가하게 된다.

3.    decorator 안에는 Component 객체가 들어있다.

4.    Decorator 자신이 decorate 구성요소와 같은 interface abstract class implement 한다.

5.    Decorator component 상태를 확장할 있다.

6.    ConcreteDecorator에는 Object decorate하고 있는 것을 위한 interface 변수가 있다.

7.    decorator에서 새로운 method 추가할 있다.

 

l  OCP (Open-Closed Principle) : class 확장에 대해서는 open 해야 하지만 코드 수정에 대해서는 close 해야 한다. 기존 코드는 건드리지 않은 채로 확장을 통해서 새로운 행동을 추가할 있도록 코드의 수정을 허용한다는 것으로 기능 추가에 유연하기에 튼튼한 디자인을 있다.


 

장점

1.    기존 코드를 수정하지 않고도 행동을 확장하는 방법이 된다.

2.    Composition delegate 통해서 실행 중에 새로운 행동을 추가할 있다.

3.    상속대신 decorator pattern 통해서 행동을 확장할 있다.

4.    OCP 충실하면서 유연한 디자인을 만들어 있다.

 


단점

1.    잡다한 클래스들이 많아 있다.

2.    객체가 다른 객체들로 쌓여 있을 있기 때문에 파악하기 힘들 있다.

3.    디자인 유연성 면에서는 좋지 않다.

 


구현 (Coffee 제조)


'SW > DesignPattern' 카테고리의 다른 글

Singleton Pattern (싱글턴 패턴)  (0) 2017.09.05
Factory Pattern (팩토리 패턴)  (0) 2017.09.05
Observer Pattern (옵저버 패턴)  (0) 2017.09.05
Strategy Pattern (스트레테지 패턴)  (0) 2017.09.05
DesignPattern이란? 왜쓰지?  (0) 2017.09.05

'Decorator'에 해당되는 글 2건

1 →