728x90
🙋♂️ 디자인패턴 구현코드 깃헙
퍼사드 패턴(Facade Pattern)
퍼사드 패턴은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어준다.
또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있다.
중요한 점은 패턴의 용도다. 퍼사드 패턴을 적용하면 단순화된 인터페이스로 서브시스템을 더 편리하게 사용할 수 있다.

집에서 영화를 보려고 하면 블라인드를 내리고, 스피커를 켜고, TV를 켜고, OTT에 접속하는 등 다양한 행동을 해야 한다. 그런데 만약 홈시어터에 영화보기 버튼이 있다면 그것만 누름으로써 앞서 설명한 모든 행동들이 순차적으로 실행되며 영화를 보기 위한 세팅을 해줄 것이다.
홈시어터 만들기
코드
home.theater.ts
생성자를 통해 연결된 장치들의 인스턴스를 받아서 초기화하고, watchMovie()와 endMovie()라는 메서드에 장치들의 세부 동작을 엮어서 캡슐화했다.
import { Amplifier } from "./amplifier";
import { Projector } from "./projector";
import { Screen } from "./screen";
import { TheaterLights } from "./theater.lights";
export class HomeTheaterFacade {
constructor(
private amp: Amplifier,
private projector: Projector,
private lights: TheaterLights,
private screen: Screen,
) {}
watchMovie(): void {
console.log("영화 볼 준비 중");
this.lights.dim(10);
this.screen.down();
this.projector.on();
this.projector.wideScreenMode();
this.amp.on();
this.amp.setVolume(5);
}
endMovie(): void {
console.log("\\n홈시어터 끄는 중");
this.lights.on();
this.screen.up();
this.projector.off();
this.amp.off();
}
}
home.theater.test.drive.ts
객체 구성을 사용하여 homeTheater의 메서드를 호출한다.
import { Amplifier } from "./amplifier";
import { HomeTheaterFacade } from "./home.theater";
import { Projector } from "./projector";
import { Screen } from "./screen";
import { TheaterLights } from "./theater.lights";
export class HomeTheaterTestDrive {
constructor(private homeTheater: HomeTheaterFacade) {}
test(): void {
this.homeTheater.watchMovie();
this.homeTheater.endMovie();
}
}
const amp = new Amplifier();
const projector = new Projector();
const lights = new TheaterLights();
const screen = new Screen();
const homeTheater = new HomeTheaterFacade(amp, projector, lights, screen);
new HomeTheaterTestDrive(homeTheater).test();
디자인 원칙
최소 지식 원칙(Principle of Knowledge)
진짜 절친에게만 이야기해야 한다.
최소 지식 원칙은 시스템을 디자인할 때 상호작용 하는 클래스의 개수와 상호작용 방식에 주의를 기울여야 한다는 뜻이다. 이 원칙을 지키려면 메서드는 다음 4가지 경우에만 호출해야 한다.
- 객체 자체
- 메서드에 매개변수로 전달된 객체
- 메서드를 생성하거나 인스턴스를 만든 객체
- 객체에 속하는 구성 요소
Car.ts
최소 지식 원칙을 준수한 자동차 코드이다.
class Car {
constructor(private engine: Engine) {}
start(key: Key): void {
const doors: Doors = new Doors();
const authorized: boolean = key.turns(); // 2. 매개변수로 전달된 객체의 메서드
if (authorized) {
this.engine.start(); // 4. 객체에 속하는 구성요소의 메서드
this.updateDashboardDisplay(); // 1. 객체 자체의 메서드
doors.loock; // 3. 인스턴스를 만든 객체의 메서드
}
}
private updateDashboardDisplay(): void {}
}
참고문서
헤드퍼스트 디자인패턴, 한빛미디어
'Dev > 디자인패턴' 카테고리의 다른 글
[타입스크립트로 살펴보는 디자인패턴 10] 반복자 패턴 (0) | 2025.01.03 |
---|---|
[타입스크립트로 살펴보는 디자인패턴 9] 템플릿 메서드 패턴 (0) | 2024.12.30 |
[타입스크립트로 살펴보는 디자인패턴 7] 어댑터 패턴 (0) | 2024.12.29 |
[타입스크립트로 살펴보는 디자인패턴 6] 커맨드 패턴 (0) | 2024.12.28 |
[타입스크립트로 살펴보는 디자인패턴 5] 싱글턴 패턴 (0) | 2024.12.25 |