Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Vue 알아보기
- AES256
- Vue 배우기
- 자바패턴
- 민생회복지원금
- MYSQL
- Vue 강의
- 주식용어
- 디버깅
- scrapy
- python 기초
- python
- Ai
- Spring
- 개발생산성
- JetBrains
- IntelliJ
- intellij완전정복
- java
- 개발툴팁
- 미국 배당주
- docker mysql
- GPT
- gradle
- docker
- 지원금신청방법
- Python 기본편
- Spring Batch 강의
- spring boot 시작
- intelliJ plugin
Archives
나만의공간
🎬 퍼사드 패턴(Facade Pattern) 완전 정복 - 영화 감상 시스템 예제로 이해하기 본문
복잡한 시스템을 하나의 창구로 단순하게 사용할 수 있다면 얼마나 편할까요?
이번 글에서는 바로 그런 역할을 하는 퍼사드 패턴(Facade Pattern)을 다룹니다.
영화 감상 시스템 예제를 통해 실무에서 어떻게 활용할 수 있는지도 함께 살펴보겠습니다.
🧱 퍼사드 패턴이란?
퍼사드 패턴은 복잡한 서브 시스템을 단순한 인터페이스로 감싸는 구조 패턴입니다.
여러 클래스를 하나의 진입점으로 통합하여 클라이언트가 복잡한 내부 구조를 몰라도 사용할 수 있게 도와줍니다.
📌 핵심: 복잡한 하위 시스템을 감추고, 단일 창구(Facade)를 제공해 사용 편의성을 높이는 것!
🎨 실생활 예시로 이해하기
🏨 호텔 프런트 데스크
- 손님은 프런트 데스크에만 요청하면 됩니다.
- 실제 내부에선 청소, 식사, 룸서비스 등 다양한 부서가 작동합니다.
➡️ 퍼사드 = 프런트 데스크
➡️ 복잡한 구조 = 호텔 내부 시스템
📌 퍼사드 패턴, 언제 사용할까?
- 복잡한 라이브러리나 시스템을 단순하게 사용할 때
- 클라이언트가 세부 구현을 몰라도 되게 하고 싶을 때
- 유지보수성과 테스트 용이성을 높이고 싶을 때
🎯 예제 시나리오: 영화 감상 시스템
사용자는 단 하나의 클래스, MovieFacade
만 호출하면 영화 감상이 시작됩니다.
하지만 실제로는 다양한 장치들이 함께 작동합니다:
- Light : 조명 제어
- Projector : 프로젝터 조작
- Speaker : 서라운드 사운드 설정
- StreamingService : 영화 재생
🔧 실무형 자바 예제
1️⃣ 서브 시스템 클래스
public class Light {
public void dim() { System.out.println("💡 불을 어둡게 합니다."); }
public void on() { System.out.println("💡 불을 밝힙니다."); }
}
public class Projector {
public void turnOn() { System.out.println("🎥 프로젝터를 켭니다."); }
public void turnOff() { System.out.println("🎥 프로젝터를 끕니다."); }
}
public class Speaker {
public void setSurroundSound() { System.out.println("🔊 서라운드 사운드를 설정합니다."); }
public void off() { System.out.println("🔇 스피커를 끕니다."); }
}
public class StreamingService {
public void play(String movie) { System.out.println("🎬 '" + movie + "' 영화를 재생합니다."); }
public void stop() { System.out.println("⏹️ 영화를 정지합니다."); }
}
2️⃣ 퍼사드 클래스: MovieFacade
public class MovieFacade {
private Light light = new Light();
private Projector projector = new Projector();
private Speaker speaker = new Speaker();
private StreamingService service = new StreamingService();
public void watchMovie(String movie) {
System.out.println("===== 영화 감상 시작 =====");
light.dim();
projector.turnOn();
speaker.setSurroundSound();
service.play(movie);
}
public void endMovie() {
System.out.println("===== 영화 감상 종료 =====");
service.stop();
speaker.off();
projector.turnOff();
light.on();
}
}
3️⃣ 사용 예
public class Main {
public static void main(String[] args) {
MovieFacade movieFacade = new MovieFacade();
movieFacade.watchMovie("인셉션");
System.out.println();
movieFacade.endMovie();
}
}
✅ 실행 결과
===== 영화 감상 시작 =====
💡 불을 어둡게 합니다.
🎥 프로젝터를 켭니다.
🔊 서라운드 사운드를 설정합니다.
🎬 '인셉션' 영화를 재생합니다.
===== 영화 감상 종료 =====
⏹️ 영화를 정지합니다.
🔇 스피커를 끕니다.
🎥 프로젝터를 끕니다.
💡 불을 밝힙니다.
📊 구조 요약 (UML 구성)
[Client]
│
▼
[MovieFacade] ─────────────┐
│ │ │ │
[Light][Projector][Speaker][StreamingService]
💼 실무 활용 사례
사례 | 설명 |
---|---|
Spring JdbcTemplate | 내부 JDBC 작업을 감추고 단순화 |
카카오/슬랙 API 모듈 | 복잡한 API 호출을 퍼사드로 감쌈 |
통합 서비스 | 여러 도메인 서비스 호출을 하나로 묶음 |
테스트용 Fake 서버 | 복잡한 외부 시스템을 테스트용으로 단순화 |
✅ 퍼사드 패턴 장단점
구분 | 설명 |
---|---|
✅ 장점 | 클라이언트는 복잡한 내부 구조를 몰라도 됨 외부 시스템 변경이 퍼사드 내부로만 제한 가독성과 유지보수성 향상 |
⚠️ 단점 | 퍼사드 클래스가 과도하게 비대해질 수 있음 내부 세부 구현이 숨겨져 디버깅이 어려움 |
🧠 마무리 요약
항목 | 설명 |
---|---|
이름 | 퍼사드(Facade) 패턴 |
목적 | 복잡한 시스템을 단순한 인터페이스로 감싸서 제공 |
실무 활용 | API 래퍼, 통합 서비스, 라이브러리 추상화 |
핵심 효과 | 의존성 감소, 클라이언트 단순화, 유지보수 용이 |
'IT > JAVA' 카테고리의 다른 글
🚀 Spring Boot로 REST API 만들기 완전 정복 (1) | 2025.06.17 |
---|---|
🦋 플라이웨이트(Flyweight) 패턴 완전 정복 (1) | 2025.06.01 |
🧱 데코레이터 패턴 완전 정복 - 커피 주문 예제로 배우는 디자인 패턴 (0) | 2025.06.01 |
🧱 1. 복합체 패턴이란? (0) | 2025.05.31 |
🧱 1. 브리지 패턴이란? (1) | 2025.05.31 |
Comments