핵심 의도

서브 시스템에 있는 일련의 인터페이스들을 통합 인터페이스로 묶어준다. 사용에 필요한 서브 시스템 클래스만 이해하면 되고, 라이브러리 형태로 코드를 제공할 때 파사드에 포함된 클래스만 제공할 수 있으므로 코드 양이 줄어든다.

적용 상황

서브 시스템의 다양한 인터페이스들을 편리하게 사용하기 위해 단순화할 때 필요하다. 예를 들어 홈 씨어터를 만들어 영화를 본다면, 불을 켜고 팝콘을 튀기고 프로젝트를 켜는 등의 일련의 동작들을 ‘영화를 본다’는 하나의 인터페이스로 통합할 수 있다.

Decoration vs Adapter vs Facade

솔루션의 구조와 각 요소의 역할

Untitled

객체에게 책임을 분할하기

다양한 서브시스템 클래스와 이를 사용하려는 클라이언트가 있다. 서브시스템 인터페이스를 단순화하는 책임을 가진 Facade를 둔다.

구현 포인트

Facade 클래스는 여러 서브시스템 클래스를 구성으로 가지며 이 클래스의 메소드를 호출한다. 이때 최소 지식 원칙을 지켜야 한다. 최소 지식 원칙에 따르면 객체 사이의 상호작용은 가능한 아주 가까운 객체들 끼리만 허용하는 것이다. 이 원칙을 지키면 시스템의 한 부분을 변경했을 때 다른 부분까지 고쳐야 하는 상황을 방지할 수 있다.