CS(15) - 옵저버패턴

gyungkyuBae·2023년 8월 9일
0

옵저버패턴

옵저버패턴이란 주체가 어떤 객체의 상태를 살펴보다가 상태가 변경되었을 때 옵저버에게 변화를 알려주고 무언가 로직을 처리하는 디자인패턴입니다.
이 패턴은 주로 이벤트 핸들링, GUI 프로그래밍, 데이터 바인딩 등에서 활용되며 객체 간 상호작용을 유연하게 구현하는 데 도움을 줍니다.

구성요소

Subject (주체): 상태 변화를 관찰하고자 하는 객체로, 옵저버들이 등록되어 있는 주체입니다. 상태가 변경될 때, 등록된 옵저버들에게 알림을 보내 상태 변화를 전달합니다.

Observer (옵저버): 주체의 상태 변화를 관찰하고 반응하는 객체입니다. 주체에 등록되어 상태 변화를 감지하고, 변화에 따라 필요한 작업을 수행합니다.

Concrete Subject (구체적인 주체): Subject 인터페이스를 구체화한 클래스로, 상태를 가지고 있으며 옵저버들에게 상태 변화를 알립니다.

Concrete Observer (구체적인 옵저버): Observer 인터페이스를 구체화한 클래스로, 주체의 상태 변화를 감지하고 처리하는 역할을 합니다.

javascript 예시

// Subject 클래스
class Subject {
    constructor() {
        this.observers = [];
    }

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

    unsubscribe(observer) {
        const index = this.observers.indexOf(observer);
        if (index !== -1) {
            this.observers.splice(index, 1);
        }
    }

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

// Observer 클래스
class Observer {
    constructor(name) {
        this.name = name;
    }

    update() {
        console.log(`${this.name} received an update.`);
    }
}

// Concrete Subject 객체
const subject = new Subject();

// Concrete Observer 객체
const observer1 = new Observer('Observer 1');
const observer2 = new Observer('Observer 2');

// 옵저버 등록
subject.subscribe(observer1);
subject.subscribe(observer2);

// 주체의 상태 변화를 감지하고 업데이트 수행
subject.notify();

위 코드에서 Subject 클래스는 옵저버를 등록하고 해제합니다.
상태 변화를 알려주는 역할을 합니다.
Observer 클래스는 주체의 상태 변화를 감지하여 로직을 처리합니다.

profile
개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기