Programing/javascript

자바스크립트 Facade Pattern

Dongkkase 2025. 4. 19. 09:04
반응형

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();

✅ 장점

  1. 단순화된 인터페이스: 복잡한 시스템을 간편하게 사용할 수 있음
  2. 결합도 감소: 사용자와 내부 시스템 간의 의존성이 낮아짐
  3. 캡슐화: 내부 구현을 숨기고 변경이 용이함

❌ 단점

  1. 퍼사드 클래스에 로직이 집중될 수 있음: 지나치게 많은 책임을 질 수 있음
  2. 내부 기능 활용 제약: 퍼사드를 거치면 내부 시스템의 세부 기능 사용이 어려움
  3. 추가 계층으로 인한 오버헤드: 단순한 경우엔 불필요한 복잡성이 될 수 있음

🛠️ 실전 예시: 알림 시스템 퍼사드

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은 복잡한 시스템을 하나의 단순한 인터페이스로 감싸서 사용성과 유지보수성을 향상시키는 데 효과적입니다. 특히 모듈이 많은 대형 애플리케이션에서 유용하며, 기능을 캡슐화하고 변경에 유연하게 대응할 수 있도록 돕는 핵심 설계 전략입니다.

반응형