반응형
Facade Pattern(퍼사드 패턴) 은 복잡한 서브시스템의 인터페이스를 단순화하여 외부에 일관된 인터페이스를 제공하는 구조 디자인 패턴입니다. 사용자 입장에서는 내부 구조를 몰라도 쉽게 기능을 사용할 수 있게 만들어줍니다.
🧱 Facade Pattern이란?
Facade Pattern은 여러 객체나 클래스의 복잡한 내부 로직을 하나의 인터페이스로 감싸서 사용자가 간단히 접근하도록 돕는 구조입니다. 사용자는 퍼사드만 보고 기능을 사용할 수 있으며, 내부 구현은 숨겨집니다.
class CPU {
start() {
console.log("CPU 시작");
}
}
class Memory {
load() {
console.log("메모리 로딩");
}
}
class HardDrive {
read() {
console.log("하드디스크 읽기");
}
}
class ComputerFacade {
constructor() {
this.cpu = new CPU();
this.memory = new Memory();
this.hardDrive = new HardDrive();
}
startComputer() {
this.cpu.start();
this.memory.load();
this.hardDrive.read();
}
}
const computer = new ComputerFacade();
computer.startComputer();
✅ 장점
- 단순화된 인터페이스: 복잡한 시스템을 간편하게 사용할 수 있음
- 결합도 감소: 사용자와 내부 시스템 간의 의존성이 낮아짐
- 캡슐화: 내부 구현을 숨기고 변경이 용이함
❌ 단점
- 퍼사드 클래스에 로직이 집중될 수 있음: 지나치게 많은 책임을 질 수 있음
- 내부 기능 활용 제약: 퍼사드를 거치면 내부 시스템의 세부 기능 사용이 어려움
- 추가 계층으로 인한 오버헤드: 단순한 경우엔 불필요한 복잡성이 될 수 있음
🛠️ 실전 예시: 알림 시스템 퍼사드
class EmailService {
sendEmail(to, message) {
console.log(`이메일 발송: ${to} - ${message}`);
}
}
class SMSService {
sendSMS(to, message) {
console.log(`SMS 발송: ${to} - ${message}`);
}
}
class NotificationFacade {
constructor() {
this.emailService = new EmailService();
this.smsService = new SMSService();
}
notifyUser(type, to, message) {
if (type === 'email') {
this.emailService.sendEmail(to, message);
} else if (type === 'sms') {
this.smsService.sendSMS(to, message);
}
}
}
const notifier = new NotificationFacade();
notifier.notifyUser('email', 'user@example.com', '이메일 테스트');
notifier.notifyUser('sms', '010-1234-5678', '문자 테스트');
🧩 결론
Facade Pattern은 복잡한 시스템을 하나의 단순한 인터페이스로 감싸서 사용성과 유지보수성을 향상시키는 데 효과적입니다. 특히 모듈이 많은 대형 애플리케이션에서 유용하며, 기능을 캡슐화하고 변경에 유연하게 대응할 수 있도록 돕는 핵심 설계 전략입니다.
반응형
'Programing > javascript' 카테고리의 다른 글
자바스크립트 Mediator Pattern (0) | 2025.04.19 |
---|---|
자바스크립트 Observer Pattern (0) | 2025.04.19 |
자바스크립트 Adapter Pattern (0) | 2025.04.19 |
자바스크립트 Proxy Pattern (0) | 2025.04.19 |
자바스크립트 Decorator Pattern (0) | 2025.04.19 |
자바스크립트 Module Pattern (0) | 2025.04.19 |
자바스크립트 Builder Pattern (0) | 2025.04.19 |
자바스크립트 Prototype Pattern (1) | 2025.04.19 |