퍼사드 facade 패턴 - 자바스크립트 예제
요약
퍼사드 facade 패턴을 자바스크립트 코드와 함께 알아봅니다. 정보처리기사 대비 문제가 포함되어있습니다.
퍼사드 패턴 요약
| 패턴 종류 | 핵심 키워드 |
|---|---|
| 퍼사드 (Facade) | 단순 인터페이스, 오류 단위 확인 |

퍼사드 (Facade) 패턴
퍼사드(Facade)는 '건물의 정면'이라는 뜻으로, 복잡한 서브시스템(subsystem)에 대한 간단한 통합 인터페이스를 제공하는 디자인 패턴입니다. 클라이언트가 서브시스템의 복잡한 내부 구조를 알 필요 없이, 퍼사드 객체가 제공하는 단순한 메서드만 호출하여 원하는 기능을 수행할 수 있도록 합니다.
현실 세계의 예로 '컴퓨터 전원 버튼'을 들 수 있습니다. 우리는 전원 버튼 하나만 누르면 컴퓨터가 켜진다고 생각하지만, 내부적으로는 CPU, 메모리, 하드디스크, 운영체제 등 수많은 부품과 소프트웨어가 복잡하게 상호작용합니다. 이때 '전원 버튼'이 바로 퍼사드 역할을 하는 것입니다. 복잡한 과정을 숨기고 사용자에게 단순한 인터페이스를 제공합니다.
기본 구조
- Facade: 서브시스템의 기능을 통합하여 간단한 인터페이스를 제공합니다. 클라이언트의 요청을 받으면, 자신이 알고 있는 여러 서브시스템 객체들에게 작업을 위임합니다.
- Subsystem Classes: 실제 기능을 수행하는 여러 클래스들의 집합입니다. 퍼사드에 의해 호출되며, 클라이언트는 보통 이 클래스들을 직접적으로 알지 못합니다.
예시: 홈시어터 시스템 제어하기
집에 DVD 플레이어, 앰프, 프로젝터, 조명 등으로 구성된 홈시어터 시스템이 있다고 상상해봅시다. 영화를 보려면 다음과 같은 여러 단계를 거쳐야 합니다.
- 프로젝터를 켠다.
- DVD 플레이어를 켠다.
- 앰프를 켠다.
- 앰프의 볼륨을 조절한다.
- 조명을 어둡게 한다.
이 모든 과정을 매번 직접 제어하는 것은 매우 번거롭습니다. 이때 퍼사드 패턴을 사용하여 "영화 보기"라는 간단한 명령 하나로 모든 것을 처리할 수 있습니다.
먼저, 각 장치를 나타내는 서브시스템 클래스들을 정의합니다.
이제 이 모든 서브시스템을 제어하는 HomeTheaterFacade를 만듭니다.
출력 결과:
클라이언트는 HomeTheaterFacade의 watchMovie()와 endMovie() 메서드만 호출하면 됩니다. 프로젝터를 먼저 켜야 하는지, 앰프 볼륨은 언제 조절해야 하는지와 같은 복잡한 내부 동작 순서나 의존성을 전혀 알 필요가 없습니다. 이처럼 퍼사드 패턴은 서브시스템과 클라이언트 간의 결합도를 낮추어 코드를 더 단순하고 유지보수하기 쉽게 만들어줍니다.
퍼사드 패턴 중요 키워드
- 복잡한 서브시스템에 대한 단순한 창구(인터페이스) 를 제공합니다.
- 클라이언트와 서브시스템 간의 결합도를 낮춥니다.
- 서브시스템의 내부 구현을 캡슐화합니다.
- 퍼사드는 단지 요청을 위임할 뿐, 스스로 새로운 기능을 만들지는 않습니다.
- 오류에 대해서 단위별로 확인할 수 있습니다.