사실 오늘 공부할 패턴은 처음 들어보는 패턴이야...
그래서 뭔지 감도 안잡혀...
개념 정리부터 무슨 말인지 잘몰라서 제일 이해된 정의를 가져와땅!
Facade Pattern?
Facade는 프랑스어에서 유래된 단어로 건물의 외관이라는 뜻을 가지고있음! 건물의 외벽에서 보면 안의 구조는 보이지 않는다! (오~ 이 한줄로 얼추 개념을 이해했어)
- 라이브러리, 프레임워크, 혹은 복잡한 클래스들의 집합에 대한 단순화된 인터페이스를 제공하는 디자인 패턴이다!
- 복잡하고 많은 Subsystem(내부구조)을 거대한 클래스(외벽)로 만들어 감싸서 편리한 인터페이스를 제공해준다! (서브시스템이..뭐야..?)
[구조]
Facade (외벽)
- 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고있다.
- 클라이언트의 요청을 적절한 Subsystem에게 전달한다.
Subsystem (내부구조)
- Subsystem 기능을 구현한다.
- Facade 객체에서 전달받은 요청을 처리한다.
- Subsystem 클래스들은 Facade 객체의 존재를 모른다.
Client
- Client는 Subsystem 객체를 직접 호출하는 대신 Facade를 사용한다.
[구현]
영화를 보기위하여 준비과정을 더한 어플리케이션을 만들것이다.
<상황만들기>
- 음료수를 준비한다.
- TV를 켠다.
- 영화를 찾는다.
- 영화를 결제 한다.
- 영화를 재생한다.
위의 과정을 모두 클래스로 만들 것입니다!
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://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
[Swift 디자인 패턴] Facade Pattern (퍼사드) - 디자인 패턴 공부 11
안녕하세요 Pingu입니다. 🐧 지난 글에서는 구조 패턴 중 Decorator Pattern(데코레이터)에 대해 알아봤는데요, 이번 글에서는 계속해서 구조 패턴 중 하나인 Facade Pattern(퍼사드)에 대해 알아보도록 하
icksw.tistory.com
** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.
이곳 저곳에서 구글링한 것과 강의 들은
내용이 정리가 되었습니다.
그림들은 그림밑에 출처표시를 해놓았습니다.
문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **
'public void static main > Etc' 카테고리의 다른 글
[Design Pattern] Bridge Pattern (0) | 2021.11.16 |
---|---|
[Design Pattern] Decorator Pattern (0) | 2021.11.16 |
[Design Pattern] Adapter Pattern (0) | 2021.11.10 |
[Design Pattern] Builder Pattern (0) | 2021.11.09 |
[Design Pattern] Flyweight Pattern (0) | 2021.11.09 |
댓글