본문 바로가기
public void static main()/Design Pattern

[Design Pattern] Facade Pattern

by 햄리뮤 2021. 11. 11.
반응형

사실 오늘 공부할 패턴은 처음 들어보는 패턴이야...

그래서 뭔지 감도 안잡혀...

 

https://refactoring.guru/design-patterns/facade

 

개념 정리부터 무슨 말인지 잘몰라서 제일 이해된 정의를 가져와땅!

Facade Pattern?

 

Facade는 프랑스어에서 유래된 단어로 건물의 외관이라는 뜻을 가지고있음! 건물의 외벽에서 보면 안의 구조는 보이지 않는다! (오~ 이 한줄로 얼추 개념을 이해했어)

http://hansungpil.com/portfolio-items/facade-wrapping/

  • 라이브러리, 프레임워크, 혹은 복잡한 클래스들의 집합에 대한 단순화된 인터페이스를 제공하는 디자인 패턴이다!
  • 복잡하고 많은 Subsystem(내부구조)을 거대한 클래스(외벽)로 만들어 감싸서 편리한 인터페이스를 제공해준다! (서브시스템이..뭐야..?)

[구조]

Facade (외벽)

  • 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고있다.
  • 클라이언트의 요청을 적절한 Subsystem에게 전달한다.

Subsystem (내부구조)

  • Subsystem 기능을 구현한다.
  • Facade 객체에서 전달받은 요청을 처리한다.
  • Subsystem 클래스들은 Facade 객체의 존재를 모른다.

Client

  • Client는 Subsystem 객체를 직접 호출하는 대신 Facade를 사용한다.

https://refactoring.guru/design-patterns/facade

[구현]

영화를 보기위하여 준비과정을 더한 어플리케이션을 만들것이다.

 

<상황만들기>

  1. 음료수를 준비한다.
  2. TV를 켠다.
  3. 영화를 찾는다.
  4. 영화를 결제 한다.
  5. 영화를 재생한다.

위의 과정을 모두 클래스로 만들 것입니다!

 

1. 음료수를 준비 클래스

public class Beverage {
  
  private String name;

  public Beverage(String name) {
    this.name = name;
  }
  
  public void prepare() {
    System.out.println(name + " 음료 준비 완료");
  }
}

2. TV 켜기 클래스

public class RemoteControl {
  public void turnOn() {
    System.out.println("TV를 켭니다!");
  }

  public void turnOff() {
    System.out.println("TV를 끕니다!");
  }
}

3. 영화 관련 메소드

public class Movie {
  private String name;

  public Movie(String name) {
    this.name = name;
  }

  public void searchMovie() {
    System.out.println(name + " 영화를 찾습니다.");
  }

  public void chargeMovie() {
    System.out.println("영화를 결제 합니다.");
  }

  public void playMovie() {
    System.out.println("영화를 재생합니다.");
  }
}

Facade class

public class Facade {
  private String beverageName;
  private String movieName;

  public Facade(String beverageName, String movieName) {
    this.beverageName = beverageName;
    this.movieName = movieName;
  }

  public void watchMovie() {
    Beverage beverage = new Beverage(beverageName);
    RemoteControl remote = new RemoteControl();
    Movie movie = new Movie(movieName);

    beverage.prepare();
    remote.turnOn();
    movie.searchMovie();
    movie.chargeMovie();
    movie.playMovie();
  }
}

<Facade Pattern 적용 전> 일부러 길게 늘린거 아니라구요!

public class FacadeApplication {
  public static void main(String[] args) {
    Beverage beverage = new Beverage("스프라이트");
    RemoteControl remote = new RemoteControl();
    Movie movie = new Movie("포뇨");
    
    // 음료수 준비
    beverage.prepare();
    // tv 켜기
    remote.turnOn();
    // 영화 찾기
    movie.searchMovie();
    // 영화 결제하기
    movie.chargeMovie();
    // 영화 재생하기
    movie.playMovie();
  }
}

<Facade Pattern 후>

public class FacadeApplication {
  public static void main(String[] args) {
    Facade facade = new Facade("스프라이트", "하울의 움직이는 성");
    facade.watchMovie();
  }
}

한눈에 봐도 차이점을 알 수 있다! 이제 다시한번 구조를 살펴보자!

Facade (외벽)

  • 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고있다.
  • 클라이언트의 요청을 적절한 Subsystem에게 전달한다.

Subsystem (내부구조)

  • Subsystem 기능을 구현한다.
  • Facade 객체에서 전달받은 요청을 처리한다.
  • Subsystem 클래스들은 Facade 객체의 존재를 모른다.

Client

  • Client는 Subsystem 객체를 직접 호출하는 대신 Facade를 사용한다.

[정리]

장점

  • Subsystem의 복잡성으로부터 코드를 분리할 수 있다.
  • Subsystem으로부터 Client를 보호하고 Client가 Subsystem을 사용하기 쉽게 만들어 준다.

단점

  • Facade는 어플리케이션의 모든 클래스에 결합된 객체가 될 수 있다. (모든 객체들의 집합소.. ㅠ)

마무리

  • Facade Pattern은 Client를 도와주는 역할이다! Subsystem을 숨기는것이 아니다!
  • 특정 기능에 대해 객체 수가 확장되고, 시스템이 복잡해질 수 있는 상황에서 사용하기 딱 좋다!

 

https://refactoring.guru/design-patterns/facade

 

 

아~ 이제 알겠다 무슨 패턴인지 근데 패턴 몇개 남았더라..?

오늘도 저를 공부시켜주신 멘토분들 너무 감사드립니다! 덕분에 오늘도 새로운 지식을 공부했습니다!

 

https://lktprogrammer.tistory.com/42

 

09 퍼사드 패턴 (Facade Pattern)

퍼사드 패턴 (Facade Pattern) Facade는 "건물의 정면"을 의미하는 단어로 어떤 소프트웨어의 다른 커다란 코드 부분에 대하여 간략화된 인터페이스를 제공해주는 디자인 패턴을 의미합니다. 퍼사드

lktprogrammer.tistory.com

https://gdtbgl93.tistory.com/142

 

[디자인패턴] 퍼사드 패턴 (Facade Pattern)

퍼사드 패턴 (Facade Pattern) = 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수

gdtbgl93.tistory.com

https://readystory.tistory.com/193

 

[구조 패턴] 퍼사드 패턴(Facade Pattern) 이해 및 예제

퍼사드 패턴(Facade Pattern)은 Flyweight 패턴, Adapter 패턴, Decorator 패턴처럼 구조 패턴 중 하나로, 클라이언트가 쉽게 시스템과 상호작용 할 수 있도록 도와주는 패턴입니다. 구조 패턴(Structural Pattern..

readystory.tistory.com

https://icksw.tistory.com/246

 

[Swift 디자인 패턴] Facade Pattern (퍼사드) - 디자인 패턴 공부 11

안녕하세요 Pingu입니다. 🐧 지난 글에서는 구조 패턴 중 Decorator Pattern(데코레이터)에 대해 알아봤는데요, 이번 글에서는 계속해서 구조 패턴 중 하나인 Facade Pattern(퍼사드)에 대해 알아보도록 하

icksw.tistory.com

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의 들은

내용이 정리가 되었습니다.

그림들은 그림밑에 출처표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

댓글