퍼사드 패턴(Facade Pattern)
서브 시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 줍니다. 또한 고수준 인터페이스를 정의하므도 정의하므로 서브시스템을 더 편리하게 사용할 수 있습니다.
구성 요소
- Client: 퍼사드를 통해 서브시스템을 사용하는 주체입니다.
- Facade: 서브시스템을 캡슐화하고 단순한 인터페이스를 제공하여 클라이언트가 서브시스템과 상호작용할 수 있게 합니다.
- Subsystem: 퍼사드가 캡슐화하는 복잡한 시스템입니다. 서브시스템은 클라이언트에게 직접 노출되지 않으며, 퍼사드를 통해서만 접근합니다.
코드
Client:
public class HomeTheaterTestDrive {
public static void main(String[] args) {
// 구성 요소 초기화
HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp, tuner, player, projector, screen, lights, poppper);
homeTheater.watchMovie("인디아나 존스:레이더스");
homeTheater.endMovie();
}
}
Facade:
public class HomeTheaterFacade {
Amplifier amp;
Tuner tuner;
StreamingPlayer player;
// 생략
public HomeTheaterFacade(Amplifier amp, Tuner tuner, StreamingPlayer player) {
this.amp = amp;
this.tuner = tuner;
this.player = player;
// 생략
}
public void watchMovie(String movie) {
System.out.println("영화 볼 준비중");
// 기타 메소드
amp.on();
amp.setStreamingPalyer(player);
// 기타 메소드
player.on();
player.play(movie);
}
public void endMovie(String movie) {
System.out.println("홈시어터를 끄는 중");
// 기타 메소드
amp.off();
// 기타 메소드
player.stop();
player.off();
}
}
Subsystem:
public class Amplifier {
// 기타 속성, 메소드
public void on() {}
public void off() {}
}
public class Tuner {
// 기타 속성, 메소드
}
public class StreamingPlayer {
// 기타 속성, 메소드
public void on() {}
public void play() {}
public void off() {}
public void stop() {}
}
핵심 정리
- 기존 클래스를 사용하려고 하는데 인터페이스가 맞지 않으면 어댑터를 쓰면 됩니다.
- 큰 인터페이스와 여러 인터페이스를 단순하게 바꾸거나 통합해야 하면 퍼스드를 쓰면 됩니다.
- 어댑터는 인터페이스를 클라이언트에서 원하는 인터페이스로 바꾸는 역할을 합니다.
- 퍼사드는 클라이언트를 복잡한 서브시스템과 분리하는 역할을 합니다.
- 업대터를 구현할 떄는 타깃 인터페이스의 크기와 구조에 따라 코딩해야 할 분량이 결정됩니다.
- 퍼사트 패턴에서는 서브시스템으로 퍼사드를 만들고 진짜 작업은 서브클래스에서 맡깁니다.
- 어댑터 패턴에에서는 서브시스템으로 퍼사드를 만들고 진짜 작업은 서브클래스에 맡깁니다.
- 어댑터 패턴에는 객체 어댑터 패턴과 클래스 어댑터 패턴이 있습니다. 클래스 어댑터를 쓰려면 다중 상속이 가능해야 합니다.
- 한 서브 시스템에 퍼사드를 여러개 만들어도 됩니다.
- 어댑터는 객체를 감싸서 인터페이스를 바꾸는 용도로, 데코레이터는 객체를 감싸서 새로운 행동을 추가하는 용도로, 퍼사드는 일련긔 객체를 감싸서 단순하게 만드는 용도로 쓰입니다.
'TIL' 카테고리의 다른 글
안드로이드 알림 전송에서 CacheBuilder를 활용한 토큰 관리 (0) | 2024.07.20 |
---|---|
헤드 퍼스트 디자인 패턴 | 07장 적응시키기 (어댑터 패턴) (0) | 2024.07.17 |
헤드 퍼스트 디자인 패턴 | 06장 호출 캡슐화하기 (커맨드 패턴) (0) | 2024.07.14 |
헤드 퍼스트 디자인 패턴 | 05장 하나뿐인 특별한 객체 만들기 (싱글턴 패턴) (0) | 2024.07.04 |
윷놀이에서 개가 나올 확률은 얼마나 될까? (0) | 2024.06.27 |