파사드 패턴(Facade Pattern)은 건물의 웅장한 정면(Facade) 뒤로 복잡한 배관과 전선들이 숨겨져 있듯이, 복잡한 내부 서브시스템들을 뒤로 숨기고 사용하기 쉬운 단순한 통합 인터페이스 하나만을 제공하는 패턴입니다.
영화를 보기 위해 'TV 전원 켜기 -> 조명 어둡게 끄기 -> 스피커 볼륨 조절 -> 넷플릭스 실행' 등 클라이언트가 4개의 클래스를 직접 제어하는 대신, HomeTheaterFacade 클래스에 watchMovie()라는 메서드 하나만 만들어 복잡한 절차를 통합 위임합니다.
📐 Facade Pattern UML
파사드 패턴은 복잡한 서브시스템들에 대한 단순화된 인터페이스(Facade)를 제공합니다.
class TV {
on() { console.log("TV 전원 켜기"); }
off() { console.log("TV 전원 끄기"); }
}
class Lighting {
dim() { console.log("조명 어둡게 낮추기"); }
on() { console.log("조명 밝게 켜기"); }
}
class Netflix {
playMovie(title) { console.log(`넷플릭스 '${title}' 재생 시작!`); }
}
// Facade Class
class HomeTheaterFacade {
constructor(tv, lighting, netflix) {
this.tv = tv;
this.lighting = lighting;
this.netflix = netflix;
}
watchMovie(movieTitle) {
console.log("\n--- 영화 볼 준비를 시작합니다 ---");
this.lighting.dim();
this.tv.on();
this.netflix.playMovie(movieTitle);
}
stopMovie() {
console.log("\n--- 영화를 종료합니다 ---");
this.tv.off();
this.lighting.on();
}
}
// Client
const homeTheater = new HomeTheaterFacade(new TV(), new Lighting(), new Netflix());
homeTheater.watchMovie("인셉션");
homeTheater.stopMovie();