옵저버패턴이란 주체가 어떤 객체의 상태를 살펴보다가 상태가 변경되었을 때 옵저버에게 변화를 알려주고 무언가 로직을 처리하는 디자인패턴입니다.
이 패턴은 주로 이벤트 핸들링, GUI 프로그래밍, 데이터 바인딩 등에서 활용되며 객체 간 상호작용을 유연하게 구현하는 데 도움을 줍니다.
Subject (주체): 상태 변화를 관찰하고자 하는 객체로, 옵저버들이 등록되어 있는 주체입니다. 상태가 변경될 때, 등록된 옵저버들에게 알림을 보내 상태 변화를 전달합니다.
Observer (옵저버): 주체의 상태 변화를 관찰하고 반응하는 객체입니다. 주체에 등록되어 상태 변화를 감지하고, 변화에 따라 필요한 작업을 수행합니다.
Concrete Subject (구체적인 주체): Subject 인터페이스를 구체화한 클래스로, 상태를 가지고 있으며 옵저버들에게 상태 변화를 알립니다.
Concrete Observer (구체적인 옵저버): Observer 인터페이스를 구체화한 클래스로, 주체의 상태 변화를 감지하고 처리하는 역할을 합니다.
// 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 클래스는 주체의 상태 변화를 감지하여 로직을 처리합니다.
이렇게 유용한 정보를 공유해주셔서 감사합니다.