본문 바로가기
javascript pure/javascript 코어 개념

20. 디자인 패턴(Design Patterns) - 2

by leo2114 2024. 2. 16.
반응형

옵저버(Observer) 패턴과 프록시(Proxy) 패턴

옵저버 패턴과 프록시 패턴은 소프트웨어 디자인 패턴 중에서 각각 관찰자 패턴과 프록시 패턴을 나타냅니다. 이 두 패턴은 각각 객체 간의 상호 작용과 객체에 대한 접근을 제어하는 데 유용합니다.

1. 옵저버(Observer) 패턴

옵저버 패턴은 객체 사이의 일 대 다 의존 관계를 정의하는 디자인 패턴입니다. 객체의 상태 변화가 발생하면 이를 관찰하는 다른 객체들에게 알림을 전달하여 상호 작용합니다.

 

핵심 내용:

  • 주체(Subject) 객체와 여러 옵저버(Observer) 객체들로 구성됩니다.
  • 주체 객체의 상태가 변경되면 옵저버들에게 이를 알리고 상태에 따라 각각의 옵저버가 업데이트됩니다.
  • 느슨한 결합을 통해 객체 간의 상호 작용을 유연하게 관리할 수 있습니다.

예시:

class Subject {
    constructor() {
        this.observers = [];
    }

    addObserver(observer) {
        this.observers.push(observer);
    }

    notify(message) {
        this.observers.forEach(observer => observer.update(message));
    }
}

class Observer {
    update(message) {
        console.log('Received message:', message);
    }
}

const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();

subject.addObserver(observer1);
subject.addObserver(observer2);

subject.notify('Hello, observers!');

2. 프록시(Proxy) 패턴

프록시 패턴은 다른 객체에 대한 접근을 제어하거나 대리할 수 있는 객체를 제공하는 디자인 패턴입니다. 객체에 대한 접근을 제어하여 보안, 로깅, 캐싱 등의 추가 기능을 제공할 수 있습니다.

 

핵심 내용:

  • 클라이언트는 실제 객체 대신 프록시 객체를 사용하여 객체에 접근합니다.
  • 프록시 객체는 실제 객체에 대한 접근을 제어하고 필요한 경우 추가 기능을 수행합니다.
  • 다양한 유형의 프록시가 있으며 필요에 따라 적절한 유형을 선택하여 사용할 수 있습니다.

예시:

class RealSubject {
    request() {
        console.log('RealSubject: Handling request.');
    }
}

class Proxy {
    constructor(realSubject) {
        this.realSubject = realSubject;
    }

    request() {
        if (this.checkAccess()) {
            this.realSubject.request();
        }
    }

    checkAccess() {
        console.log('Proxy: Checking access.');
        // Access control logic
        return true;
    }
}

const realSubject = new RealSubject();
const proxy = new Proxy(realSubject);

proxy.request();
반응형