티스토리 툴바

1. 컨텍스트
Façade 패턴은 복잡한 서브 시스템에 통일된 인터페이스를 제공함으로써 복잡한 API를 단순화 시켜준다. 시스템을 서브 시스템 단위로 나누어 구성하는 것은 시스템의 복잡도를 낮춰주지만, 동시에 서브 시스템 사이에서의 통신 부하와 결합도가 증가하게 된다. 이러한 서브 시스템 사이의 의존도를 낮추고, 서브 시스템의 사용자 입장에서 사용하기 편리한 인터페이스를 제공하고자 하는 것이 façade 객체이다.


Façade 객체는 실생활에서의 고객 서비스 센터와 유사하다. 가령, 어떤 상품을 구매하는 과정에서 문제가 생겼다고 가정할 때, 고객이 문제의 성격에 따라 해당 부서에 직접 연락하는 것이 아니라 고객 서비스 센터를 통하는 것은 Façade 패턴에 대한 좋은 유추 사례가 될 수 있다.

2. 적용 영역
l        복잡한 서브 시스템에 대해 간단한 인터페이스를 제공하기를 원하는 경우
l        클라이언트와 인터페이스의 구현 클래스 사이에 의존도가 높은 경우
l        서브 시스템을 레이어(layer)로 구분하고자 하는 경우

3. 구조

4. 적용 결과
l        서브 시스템의 컴포넌트로부터 클라이언트를 격리하여, 클라이언트가 쉽게 서브 시스템을 이용할 수 있다.
l        서브 시스템과 클라이언트 사이의 의존성을 낮춘다.
l        Façade 패턴을 사용한다고 해도, 필요한 경우 서브 시스템의 클래스에 직접 접근할 수도 있다. 즉, 일반화 정도(generality)와 개발의 편의성 사이에서의 적당한 합의점을 찾아야 한다.

5. 관련 패턴
l        Abstract Factory는 Façade와 함께 사용되어 서브 시스템에 독립적으로 서브 시스템의 객체를 생성하는 인터페이스를 제공한다. 또한, 특정 플랫폼에 국한된 클래스를 숨기기 위해 Façade 대신 사용할 수도 있다.
l        Mediator는 기존의 클래스의 기능을 추상화한다는 의미에서 Façade와 유사하다. 그러나, Mediator의 목적은 서로 직접적인 연관을 갖는 객체(colleague object) 사이에서의 커뮤니케이션을 추상화하는 것인데 반해, Façade는 서브 시스템의 인터페이스를 추상화하는 것이다.
l        하나의 Façade 객체만이 요구되는 경우에는 Façade 객체가 Singleton 형태를 취하기도 한다.

6. 참고 문헌
위키피디아: Façade pattern
충북대 번역글: The Facade Pattern 
자바월드:
- Clever facade makes JDBC look easy
- Façade clears complexity

OOPSLA ’97 workshop of Non-Software Examples of Software Design Patterns by Michael Duell, John Goodsen, and Linda Rising
Design Patterns: Elements of Reusable Object-Oriented Software

Head First Design Patterns
에릭 프리먼 외 지음,
서환수 옮김
한빛미디어

GOF의 디자인 패턴
Erich Gamma 외 지음,
김정아 옮김
피어슨에듀케이션코리아

설정

트랙백

댓글