목차
💡
- 왜 퍼사드 패턴을 사용해야 하는가
- 설계도는 어떻게 생겼나?
- 실제로 어떻게 구현하나?
- 장점과 단점은 무엇인가?
왜 퍼사드 패턴을 사용해야 하는가?
복잡한 여러 개의 하위 시스템(클래스)들을 하나의 단순한 인터페이스로 통합하여 사용하기 쉽게 만들기 위해 사용합니다.
⇒ 프랑스어로 건물의 정면을 뜻합니다. 건물의 내부가 아니라, 건물의 입구 즉 문을 보는 뉘양스입니다.
- 집 안에서 영화를 보기 위해, 세팅을 해야합니다.
- 불을 끄고, 커튼을 치고, 사운드 설정도 고려해야합니다.
- 이 때, 퍼사드패턴을 통해 통합 리모컨을 만든다면, “영화 준비” 버튼 하나면 해결이 됩니다.
설계도는 어떻게 생겼나?
클라이언트는 복잡한 서브 시스템들과 직접 대화하지 않고, 중간에 있는 퍼사드 객체하고만 대화합니다.
실제로 어떻게 구현하나?
영화를 보기 전 세팅을 위해 불을 끄고, 커튼을 치고, 사운드 설정하는 상황을 고려합니다.
서브 시스템 담당 코드
// 1. 조명 시스템
class Light {
public void turnOff() {
System.out.println("💡 조명을 끕니다. (어두워짐)");
}
}
// 2. 커튼 시스템
class Curtain {
public void close() {
System.out.println("🪟 커튼을 칩니다. (빛 차단)");
}
}
// 3. 사운드 시스템
class SoundSystem {
public void setSoundMode(int level) {
System.out.println("🔊 사운드를 영화 모드로 설정합니다. (볼륨: " + level + ")");
}
}
퍼사드 클래스 코드
public class MoviePreparationFacade {
// 서브 시스템들을 멤버 변수로 가짐
private Light light;
private Curtain curtain;
private SoundSystem soundSystem;
// 생성자: 퍼사드가 생성될 때 서브 시스템들도 같이 준비됨
public MoviePreparationFacade() {
this.light = new Light();
this.curtain = new Curtain();
this.soundSystem = new SoundSystem();
}
// 🌟 핵심: 복잡한 과정을 '준비(prepare)' 메서드 하나로 통합
public void prepareMovie() {
System.out.println("=== 🎬 영화 볼 준비를 시작합니다 ===");
light.turnOff(); // 불 끄고
curtain.close(); // 커튼 치고
soundSystem.setSoundMode(20); // 사운드 설정
System.out.println("=== 준비 완료! 팝콘 가져오세요 ===");
}
}
사용 예시
public class Main {
public static void main(String[] args) {
// 복잡한 서브 시스템을 몰라도, 퍼사드 객체 하나만 있으면 됨
MoviePreparationFacade myRemote = new MoviePreparationFacade();
// 버튼 하나로 영화 준비 끝!
myRemote.prepareMovie();
}
}
장점과 단점은 무엇인가?
장점
- 사용 편의성
- 클라이언트는 복잡한 내부 로직을 알 필요 없이, 인터페이스만 알면 됩니다.
- 결합도 감소
- 코드를 수정 시, 기능들은 인터페이스를 기준으로 결합되므로 코드의 결합도가 내려가게 됩니다.
단점
- 만능 객체
- 모든 시스템들을 퍼사드 객체에 넣으려고 하면, 한 객체가 굉장히 비대하고 복잡해질 수 있습니다.
- 기능의 제한
- 퍼사드는 자주 쓰는 기능을 편하게 한 것이지, 특수한 기능을 넣는 경우는 오히려 방해가 될 것입니다.
'LV3_Advanced > GOF 패턴' 카테고리의 다른 글
| Adapter (어댑터) - 구조 패턴 #2 (0) | 2026.02.24 |
|---|---|
| Strategy (스트래티지) - 행위 패턴 #2 (0) | 2026.02.20 |
| Template Method (템플릿 메서드) - 행위 패턴 #1 (0) | 2026.02.19 |
| Builder (빌더) - 생성 패턴 #2 (0) | 2026.02.16 |
| Singleton (싱글톤) - 생성 패턴 #1 (0) | 2026.02.11 |