퍼사드 Facade
🙊

퍼사드 Facade

Created
Apr 24, 2024 04:09 AM
Last edited time
Last updated April 24, 2024
Tags
CS
Language
URL

Intro::

디자인 패턴 중 구조 패턴인 퍼사드 패턴에 대해 알아봅시다.
 

퍼사드 패턴이란?

💡
퍼사드 패턴의 기본 목적은 복잡한 시스템을 더 쉽게 사용할 수 있도록 외부에서 보는 인터페이스를 단순화하는 것입니다. 이 패턴을 사용하면 시스템과 상호작용하는 클라이언트는 필요한 기능만을 제공하는 '퍼사드'라는 단일 클래스를 통해 복잡한 서브시스템과 소통할 수 있습니다.
 

장점

  • 단순성: 클라이언트는 복잡한 서브시스템과 직접 상호작용할 필요 없이, 퍼사드를 통해 필요한 기능을 쉽게 사용할 수 있습니다.
  • 유지보수성: 시스템의 내부 구현이 변경되어도, 퍼사드 인터페이스는 그대로 유지할 수 있어 클라이언트 코드의 변경을 최소화할 수 있습니다.
  • 분리와 캡슐화: 시스템의 복잡한 부분은 퍼사드 뒤에 캡슐화되어, 시스템의 나머지 부분과의 의존성이 감소합니다.
 

단점

  • 과도한 단순화: 퍼사드가 제공하는 인터페이스가 너무 단순화되어 있으면, 클라이언트가 서브시스템의 보다 세밀한 기능을 필요로 할 때 직접 접근할 필요가 있을 수 있습니다. 이는 퍼사드 패턴의 목적을 약화시킬 수 있습니다.
  • 퍼사드의 의존성: 시스템이 퍼사드에 지나치게 의존하게 되면, 퍼사드 클래스가 시스템의 병목 지점이 되거나 과부하 될 위험이 있습니다.
 

코드 예시

// 서브시스템 클래스 1: DVDPlayer class DVDPlayer { void on() { System.out.println("DVD 플레이어가 켜졌습니다."); } void play(String movie) { System.out.println(movie + " 재생을 시작합니다."); } void off() { System.out.println("DVD 플레이어가 꺼졌습니다."); } } // 서브시스템 클래스 2: Projector class Projector { void on() { System.out.println("프로젝터가 켜졌습니다."); } void off() { System.out.println("프로젝터가 꺼졌습니다."); } } // 서브시스템 클래스 3: Screen class Screen { void down() { System.out.println("스크린이 내려갑니다."); } void up() { System.out.println("스크린이 올라갑니다."); } } // 퍼사드 클래스: HomeTheaterFacade class HomeTheaterFacade { private DVDPlayer dvdPlayer; private Projector projector; private Screen screen; public HomeTheaterFacade(DVDPlayer dvdPlayer, Projector projector, Screen screen) { this.dvdPlayer = dvdPlayer; this.projector = projector; this.screen = screen; } public void watchMovie(String movie) { System.out.println("영화를 보기 위해 홈 시어터를 설정합니다."); screen.down(); projector.on(); dvdPlayer.on(); dvdPlayer.play(movie); } public void endMovie() { System.out.println("영화 시청을 종료합니다."); dvdPlayer.off(); projector.off(); screen.up(); } } // 클라이언트 코드 public class Main { public static void main(String[] args) { DVDPlayer dvd = new DVDPlayer(); Projector projector = new Projector(); Screen screen = new Screen(); HomeTheaterFacade homeTheater = new HomeTheaterFacade(dvd, projector, screen); homeTheater.watchMovie("기생충"); homeTheater.endMovie(); } }
 
 

References::

Loading Comments...