# 파사드 패턴

---

파사드 패턴은 복잡한 클래스에 대해 단순화된 인터페이스를 제공한다. 즉 여러 클래스에 대한 진입점 역할을 한다. 사용하기 쉽고, 구성 요소 간의 결합을 낮춘다. 그리고 개별 클래스의 역할을 보다 명확히 할 수 있다.

보통 복잡한 API, 라이브러리, 시스템의 사용을 단순화하는 데 사용한다.

```
class TV {
  turnOn() {
    console.log('Turning on TV');
  }
  
  turnOff() {
    console.log('Turning off TV');
  }
}

class SoundSystem {
  turnOn() {
    console.log('Turning on sound system');
  }
  
  turnOff() {
    console.log('Turning off sound system');
  }
  
  setVolume(level) {
    console.log(`Setting sound system volume to ${level}`);
  }
}

class DVDPlayer {
  turnOn() {
    console.log('Turning on DVD player');
  }
  
  turnOff() {
    console.log('Turning off DVD player');
  }
  
  play(movie) {
    console.log(`Playing ${movie} on DVD player`);
  }
}

class HomeTheaterFacade {
  constructor(tv, soundSystem, dvdPlayer) {
    this.tv = tv;
    this.soundSystem = soundSystem;
    this.dvdPlayer = dvdPlayer;
  }
  
  watchMovie(movie) {
    console.log(`Watching ${movie}...`);
    this.tv.turnOn();
    this.soundSystem.turnOn();
    this.soundSystem.setVolume(10);
    this.dvdPlayer.turnOn();
    this.dvdPlayer.play(movie);
  }
  
  stopMovie() {
    console.log('Stopping movie...');
    this.tv.turnOff();
    this.soundSystem.turnOff();
    this.dvdPlayer.turnOff();
  }
}

const tv = new TV();
const soundSystem = new SoundSystem();
const dvdPlayer = new DVDPlayer();

const homeTheater = new HomeTheaterFacade(tv, soundSystem, dvdPlayer);
homeTheater.watchMovie('Star Wars');
homeTheater.stopMovie();
```

For the site tree, see the [root Markdown](https://slashpage.com/develop.md).
