본문 바로가기
개발공부 일지/면접

파사드 패턴(Facade Pattern)

by Box Cat 2023. 10. 3.
728x90
반응형
 

 어떤 기능을 처리하기 위해 여러 객체들 사이의 복잡한 매서드 사용을 감춰서 단순화 시켜주는 패턴

예시)어떤 데이터를 조회해서 출력해주는 기능

 

 

Facade 패턴은 어떤 기능 개발을 위해 필요한 많은 클래스와 관련 API 호출 등 복잡한 내용을 단순환 시켜주는 패턴입니다

 

즉,Facade에 해당하는 클래스 하나로 단순화 시키고 기존의 캘래스들은 감출 수 있습니다.(비공개 처리가 가능)

 

Facade 패턴을 적용하여 만들어진 라이브러리를 사용하는 개별자의 입장에서 학습에 대한 부담이 많이 줄게 됩니다.

 
class Amplifier {
    public turnOn(): void {
      console.log("Amplifier is turned On");
    }
 
    public setVolume(level: number): void {
      console.log(`Volume is set to ${level}`);
    }
  }
 
  class DvdPlayer {
    public turnOn(): void {
      console.log("The DVD Player is tuned on");
    }
 
    public play(movie: string) {
      console.log(`Playing ${movie}`);
    }
  }
 
  class Projector {
    public turnOn(): void {
      console.log("Projector is turned on");
    }
 
    public setInput(dvdPlayer: DvdPlayer): void {
      console.log("Input set to DvdPlayer");
    }
  }
 
  class Lights {
    public dim(level: number): void {
      console.log(`Lights dimmed to ${level}`);
    }
  }
 
  class HomeTheaterFacade {
    constructor(
      private amplifier: Amplifier,
      private dvdPlayer: DvdPlayer,
      private projector: Projector,
      private lights: Lights
    ) {}
 
    public watchMovie(movie: string, volume: number, level: number) {
      console.log(`Get Ready To Watch ${movie}`);
      this.lights.dim(level);
      this.amplifier.turnOn();
      this.amplifier.setVolume(volume);
      this.dvdPlayer.turnOn();
      this.projector.turnOn();
      this.projector.setInput(this.dvdPlayer);
      this.dvdPlayer.play(movie);
    }
  }
 
  // Client Code
  let amplifier = new Amplifier();
  let dvdPlayer = new DvdPlayer();
  let projector = new Projector();
  let lights = new Lights();
 
  let homeTheater = new HomeTheaterFacade(
    amplifier,
    dvdPlayer,
    projector,
    lights
  );
 
  homeTheater.watchMovie("Inception", 10, 5);
728x90
반응형

댓글