Ayden's journal

파사드 패턴

파사드 패턴은 복잡한 시스템의 내부 구현을 숨기고, 외부에 간단하고 일관된 인터페이스를 제공하는 구조를 뜻한다. 이렇게 함으로써 클라이언트는 시스템의 복잡한 구성 요소와 상호작용할 필요 없이, 필요한 기능을 더 쉽게 사용할 수 있다. 파사드 패턴은 주로 서브시스템이 복잡하거나 여러 개의 모듈을 다뤄야 할 때 유용하다. 이를 통해 각 모듈이나 클래스를 개별적으로 이해하거나 다룰 필요 없이, 하나의 간단한 인터페이스를 통해 복잡한 작업을 수행할 수 있다. 예를 들어, 다양한 하위 시스템을 하나의 메서드를 통해 호출하도록 묶어서, 클라이언트가 시스템의 세부 사항에 신경 쓰지 않고도 필요한 기능을 쉽게 이용할 수 있도록 한다.

즉, 파사드 패턴은 여러 시스템의 복잡한 구현을 한 번에 감추고, 그 위에 간단하고 일관된 인터페이스를 제공하는데, 이는 클라이언트가 각 세부적인 로직을 이해하지 않고도 시스템을 이용할 수 있게 해주는 2중 추상화의 효과를 가진다고 볼 수 있다. 이 추상화 계층을 통해 클라이언트는 내부 시스템의 세부 사항에 신경 쓰지 않고, 필요한 작업을 간단한 인터페이스로 처리할 수 있게 된다.

// 파사드 클래스
class PizzaStore {
private pizza: Pizza;
private box: Box;
private plasticWrap: PlasticWrap;
constructor() {
this.pizza = new Pizza();
this.box = new Box();
this.plasticWrap = new PlasticWrap();
}
// 외부에 제공되는 공용 인터페이스
public processOrder(): void {
this.preparePizza();
this.packPizza();
this.servePizza();
}
// 내부적으로만 호출되는 메서드들
private preparePizza(): void {
console.log('피자 준비 시작...');
this.pizza.dough();
this.pizza.topping();
this.pizza.bake();
this.pizza.cut();
}
private packPizza(): void {
console.log('피자 포장 시작...');
this.box.fold();
this.box.putPizza();
this.plasticWrap.wrap();
}
private servePizza(): void {
console.log('피자 제공!');
}
}
// 클라이언트 코드
const pizzaStore = new PizzaStore();
pizzaStore.processOrder();

 

블로그의 프로필 사진

블로그의 정보

Ayden's journal

Beard Weard Ayden

활동하기