퍼사드 패턴

이진호·2022년 9월 27일
0

GoF 디자인 패턴

목록 보기
2/3
post-thumbnail

퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern)은 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 줍니다. 또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있습니다.

예제

public class HomeTheaterFacade {
    Amplifier amp;
    Tuner tuner;
    StreamingPlayer player;
    Projector projector;
    TheaterLights lights;
    Screen screen;
    PopcornPopper popper;

    public HomeTheaterFacade(Amplifier amp,
                             Tuner tuner,
                             StreamingPlayer player,
                             TheaterLights lights,
                             Screen screen,
                             PopcornPopper popper) {
        this.amp = amp;
        this.tuner = tuner;
        this.player = player;
        this.lights = lights;
        this.screen = screen;
        this.popper = popper;
    }

    // watchMovie() 메소드는 꽤 복잡한 일을 하나의 메소드로 간단하게 처리
    public void watchMovie(String movie) {
        System.out.println("영화 볼 준비 중");
        popper.on();
        popper.pop();
        lights.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setStreamingPlayer(player);
        amp.setSurroundSound();
        amp.setVolume(5);
        player.on();
        player.play(movie);
    }

    // endMovie() 메소드는 모든 구성 요소를 끄는 기능을 제공
    public void endMovie() {
        System.out.println("홈시어터를 끄는 중");
        popper.off();
        lights.on();
        screen.up();
        projector.off();
        amp.off();
        player.stop();
        projector.off();
    }
}

최소 지식 원칙

최소 지식 원칙(Principle of Least Knowledge)는 객체 사이의 상호작용은 될 수 있으면 가까운 '친구' 사이에서만 허용하는 것이 좋음을 의미합니다.

이 원칙을 잘 따르면 여러 클래스가 복잡하게 얽혀 있어서, 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야 하는 상황을 미리 방지할 수 있습니다.

이 원칙은 친구를 만들지 않는 4개의 가이드라인을 제시합니다.

  • 객체 자체
  • 메소드에 매개변수로 전달된 객체
  • 메소드를 생성하거나 인스턴스를 만든 객체
  • 객체에 속하는 구성 요소

예제

// 원칙을 따르지 않는 경우
public float getTemp() {
    Thermometer thermometer = station.getThermometer();
    return thermometer.getTemperature();
}

// 원칙을 따르는 경우
public float getTemp() {
    return station.getTemperature(); // 최소 원칙을 적용해서 thermometer에게 요청을 전달하는 메소드를 Station 클래스에 추가
}

출처

0개의 댓글