Facade Pattern

개념
- 대규모 프로그램을 사용해서 처리를 하려면 서로 관련 있는 많은 클래스들을 적절히 제어 해야 한다. 많은 클래스들을 제어하기 위해서는 '창구'를 준비해야 한다

I. 의도

 서브시스템을 합성하는 다수 객체들의 인터페이스 집합에 대해 일관된 인터페이스를 제공

 서브시스템의 복잡한 인터페이스를 단순화된 하나의 인터페이스로 제공하려는 것

 

정의 : 대규모 프로그램을 사용해서 처리를 하려면 서로 관련 있는 많은 클래스들을 적절히 제어 해야 한다. 많은 클래스들을 제어하기 위해서는 '창구'를 준비해야 한다.
 그렇게 하면 많은 클래스들을 개별적으로 제어하지 않아도 '창구'에게 요구만 하면 일이 끝나기 때문이다.


II. 활용

  • 복잡한 서브시스템에 대한 단순한 인터페이스 제공이 필요할 때
  • 클라이언트와 구현 클래스간에 너무 많은 종속성이 존재할 때, façade의 사용으로 클라이언트와 다른 서브시스템간의 결합도를 줄일 수 있다.
  • 서브시스템들의 계층화를 이루고자 할 때, façade는 각 서브시스템의 계층별 접근점을 제공한다

III. 결과

  • 서브시스템의 구성 요소 보호
  • 서브시스템과 클라이언트 코드 간의 결합도를 낮춤
  • 그러나 서브시스템 클래스를 사용하는 것을 완전히 막지는 않는다.  Façade/서브시스템 클래스를 직접 사용할지 결정

관련 패턴: 서브시스템에 독립적인 방법으로 서브시스템 객체를 생성하는 인터페이스를 제공하기 위해 Façade와 Abstract Factory를 함께 사용할 수 있다.  Abstract Factory는 플랫폼 종속적인 클래스를 감추는 Façade에 대한 대안이다

Mediator도 기존에 존재하는 클래스의 기능성을 추상화한다는 점에서 Façade와 비슷하지만 Mediator의 목적은 여러 객체들 사이의 협력 관계를 추상화해 기능성의 집중화를 막자는 것이다. Mediator 패턴에 참여하는 객체는 서로를 직접 알지 못하고 단지 Mediator를 통해서만 상호작용이 이루어진다.  이에 반해 Façade는 서브시스템 인터페이스 자체를 추상화해 사용을 용이하게 하려는 목적을 갖는다. 즉 새로운 기능성을 추가할 수도 없고, 이런 새로운 기능성에 대해서는 알 수도 없다.

Façade 객체가 하나만 있어도 된다면 Singleton으로 구현된다

구조

설명

퍼사드

퍼사드 클래스는 패키지 1,2,3 및 그림에 나오지 않은

그 밖의 응용 프로그램 코드와 상호 동작.

클라이언트

패키지 내의 리소스들을 접근하기 위해 퍼사드 클래스를

쓰는 객체.

패키지

소프트웨어 라이브러리 / API 집합.

퍼사드 클래스를 통해 접근

댓글