1. 파사드 패턴이란?
- 파사드(Facade) 패턴은 복잡한 서브시스템에 대한 간단한 인터페이스를 제공하는 구조적 디자인 패턴입니다.
- 이 패턴은 라이브러리, 프레임워크 또는 복잡한 클래스 집합에 대한 단순화된 인터페이스를 제공합니다.
- 파사드는 클라이언트가 복잡한 서브시스템의 내부 동작을 이해하지 않고도 필요한 기능을 쉽게 사용할 수 있게 합니다.
1.1 파사드 패턴의 목적
- 복잡한 시스템의 사용 난이도를 낮춤
- 서브시스템에 대한 의존성 감소
- 클라이언트 코드와 서브시스템 간의 결합도 감소
- 코드의 가독성과 유지보수성 향상
2. 문제 상황
- 복잡한 라이브러리나 프레임워크를 사용할 때 많은 객체를 초기화하고, 의존성을 추적하며, 올바른 순서로 메서드를 실행해야 합니다.
- 이로 인해 비즈니스 로직이 서드파티 클래스의 구현 세부사항과 강하게 결합되어 코드 이해와 유지보수가 어려워집니다.
2.1 실생활 예시
- 전화로 상품을 주문할 때 상담원은 주문 시스템, 결제 게이트웨이, 배송 서비스 등 가게의 모든 서비스와 부서에 대한 파사드 역할을 합니다.
- 상담원은 복잡한 주문 시스템의, 단순한 음성 인터페이스를 제공합니다.
팁
파사드 패턴은 마치 복잡한 기계의 간단한 제어판과 같습니다. 내부 작동 방식은 복잡하지만, 사용자(클라이언트)는 몇 개의 버튼만 눌러 원하는 기능을 사용할 수 있습니다.
3. 파사드 패턴의 구조
3.1 주요 구성 요소

- 파사드(Facade): 서브시스템의 기능에 대한 편리한 접근을 제공하는 클래스입니다. 클라이언트 요청을 어디로 전달할지 알고 있으며 모든 구성 요소를 작동시키는 방법을 알고 있습니다.
- 추가 파사드(Additional Facade): 단일 파사드에 관련 없는 기능들로 오염되는 것을 방지하기 위해 생성할 수 있는 클래스입니다.
- 복잡한 서브시스템(Complex Subsystem): 수십 개의 다양한 객체로 구성됩니다. 서브시스템 클래스들은 파사드의 존재를 알지 못하며, 시스템 내에서 서로 직접 작동합니다.
- 클라이언트(Client): 서브시스템 객체를 직접 호출하는 대신 파사드를 사용합니다.
3.2 구조 다이어그램
+----------------+ +----------------+
| Client |----->| Facade |
+----------------+ +----------------+
|
|
v
+--------------+
| |
+----->| Subsystem A |
| | |
| +--------------+
|
| +--------------+
| | |
+----->| Subsystem B |
| | |
| +--------------+
|
| +--------------+
| | |
+----->| Subsystem C |
| |
+--------------+