Observer
μ΅μ λ² ν¨ν΄μ΄λ νΉμ κ°μ²΄μ μνλ₯Ό μ¬λ¬ observer λ€μ΄ ꡬλ νμ¬ κ°μ²΄μ λ³νκ° μμ λλ§λ€ μ΅μ λ² λ€μκ² μλ €μ£Όλ ν¨ν΄μ λ§νλ€. μ‘°κΈ λ μμΈν λ§νμλ©΄, κ°μ²΄μ λ³νκ° λ°μνκ² λλ©΄ ν΄λΉ κ°μ²΄λ₯Ό ꡬλ νκ³ μλ μ΅μ λ²λ€μκ² μνκ° λ°λμλ€λ μλ¦Όμ λ³΄λ΄ μνλ₯Ό κ°±μ νλλ‘ νκ² νλ κ²μ΄λ€.
μ°λ¦¬κ° μΈμ€νκ·Έλ¨ κ°μ snsλ₯Ό μ¬μ©νλ©΄μ λ΄κ° νλ‘μ°ν μ¬λμ κ²μλ¬Όμ΄ μ λ°μ΄νΈ λ λλ§λ€ μλ¦ΌμΌλ‘ μλ €μ£Όλ κ²μ μκ°νλ©΄ νΈν λ― νλ€. λ³΄ν΅ μΌλμΌ, μΌλλ€μ κ΄κ³λ₯Ό κ°μ§λ€.

μ΅μ λ² ν¨ν΄μ μ¬μ©νμ§ μμ κ²½μ°, νΉμ κ°μ²΄μ λ³νκ° μΌμ΄λ¬λμ§ νμΈνκΈ° μν΄ μ£ΌκΈ°μ μΌλ‘ νμΈμ ν΄μ£Όμ΄μΌ νλλ°, μ΄κ²μ λ°λ‘ Polling
μ΄λΌκ³ νλ€. μ΄ κ²½μ°, νλ§μ νλ 리μμ€μ μΆκ° λ° νλ§ μ¬μ΄μ μ΄λ²€νΈκ° λ°μνκ² λ κ²½μ°, ν΄λΉ μ΄λ²€νΈλ₯Ό μΊμΉ νμ§ λͺ»νλ μν©μ΄ λ°μν μλ μλ€.
μ΄μ μ΅μ λ² ν¨ν΄μ μλ λ‘μ§μμμ νμν λκ°μ κ°μ²΄λ₯Ό μ΄ν΄λ³΄μ.
Subject (Object)
μν λ³νμ 주체 κ°μ²΄μ΄λ€. μ΄ κ°μ²΄μλ κ°μ²΄λ₯Ό ꡬλ νκ³ μλ μ΅μ λ²λ€μ 리μ€νΈμ μ¬λ¬ λ©μλλ€μ΄ ν¬ν¨λμ΄ μλ€.
subscribe : κ°μ²΄μ μ΅μ λ²λ₯Ό λ±λ‘νλ λ©μλ
notify : updateκ° μ€νλμμλ, μ΅μ λ²λ€μκ² μλ €μ£Όλ λ©μλ
ν¨ν΄μ ꡬννκΈ° μν΄ νμμ μΈ λ κ°μ§μ λ©μλ μ΄λ€. Subjectλ μνμ λ³νκ° μΌμ΄λκ² λλ©΄ μ΅μ λ² λ¦¬μ€νΈμ μλ μ΅μ λ²λ€μκ² notify
λ©μλλ₯Ό ν΅νμ¬ μ΄ κ°μ²΄ μνκ° λ³νλ€λ κ²μ μλ €μ€λ€.
κ°λ¨ν ꡬν μμλ₯Ό 보λλ‘ νμ.
interface ISubject {
subscribe(observer: Observer): void;
remove(observer: Observer): void;
notify(): void;
}
class Subject implements ISubject {
// μ΅μ λ² λ¦¬μ€νΈ
private observers: Observer[] = [];
private state: any;
// μ΅μ λ²λ₯Ό λ±λ‘νλ subscribe λ©μλ
subscribe(observer: Observer): void {
this.observers.push(observer);
}
// λ±λ‘λ μ΅μ λ²λ₯Ό μ κ±°νλ remove λ©μλ
remove(observer: Observer): void {
const index = this.observers.indexOf(observer);
if (index > -1) {
this.observers.splice(index, 1);
}
}
// μ΅μ λ²λ€μκ² μνλ³νλ₯Ό μλ €μ£Όλ notify λ©μλ
notify(): void {
for (const observer of this.observers) {
observer.update(this.state);
}
}
setState(state: any): void {
this.state = state;
this.notifyObservers();
}
getState(): any {
return this.state;
}
}
Observer
Subjectμ μνλ₯Ό ꡬλ
νκ³ μλ μ΅μ λ² κ°μ²΄μ΄λ€. Subjectμ μ μ¬νκ² λ΄λΆμ λ©μλλ₯Ό ν¬ν¨νκ³ μλλ°, Subject μ μν λ³νκ° μΌμ΄λκ² λμ΄ μλ¦Όμ λ°μμλ μ€νλ update
λ©μλκ° λ°λ‘ κ·Έκ²μ΄λ€. μΌλλ€μ κ΄κ³λ₯Ό κ°μ§ μ΅μ λ² ν¨ν΄μ νΉμ±μ, μ¬λ¬ μ΅μ λ²κ° νμνκ² λλ©΄ ν΄λμ€λ₯Ό λ§λ€μ΄ μμνμ¬ μ¬μ©νκ²λ λ§λ λ€.
κ°λ¨ν ꡬνκ³Ό μ΄λ€ μμΌλ‘ μ¬μ© νλμ§μ λν μμλ₯Ό μ΄ν΄λ³΄μ.
interface IObserver {
update(data: any): void;
}
class Observer implements IObserver {
private id: number;
constructor(id: number) {
this.id = id;
}
update(data: any): void {
console.log(`Observer ${this.id} received data: ${data}`);
}
}
const subject = new Subject();
const observer1 = new Observer(1);
const observer2 = new Observer(2);
subject.subscribe(observer1);
subject.subscribe(observer2);
subject.setState("Hello Observers!");
subject.remove(observer1);
subject.setState("Only observer2 should receive this");
Last updated