본문 바로가기
Design Pattern

퍼사드 패턴 (Facade Pattern)

by 밍상 2023. 10. 24.

퍼사드 패턴은

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

 

어댑터 패턴에선 어떤 클래스의 인터페이스를 클라이언트가 원하는 인터페이스로 변환하는 방법을 배웠습니다.

퍼사드 패턴에선 인터페이스를 단순하게 바꾸려고 인터페이스를 변경합니다.

 

홈시어터 예시

public class HomeTheaterFacade {
    PopcornPoppper popper;
    Projector projector;
    StreamingPlayer player;

    public void watchMovie(String movie) {
        popper.on();
        popper.pop();
        projector.on();
        player.on();
        player.play();
    }
}

홈시어터 퍼사드 클래스를 이용하면 팝콘 튀기기, 프로젝터 on, 플레이어 on 등의 작업들을 하나의 메서드로 간단하게 처리할 수 있다.

또한 popper, projector, player 인스턴스 필드에 접근해 각각의 세부적인 기능을 직접 사용할 수도 있다.

 

장점

  • 클라이언트는 간단하면서 유연해짐
  • 홈시어터 구성 요소를 업그레이드해도 클라이언트는 아무 영향을 받지 않음

 

최소 지식 원칙 = 데메테르 법칙

객체 사이의 상호작용은 될 수 있으면 아주 가까운 '친구' 사이에서만 허용하는 편이 좋습니다.

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

 

참고

 

에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠. 『헤드퍼스트 디자인패턴 개정판』. 한빛미디어, 2022