Programing/javascript

자바스크립트 Observer Pattern

2025. 4. 19. 09:11
반응형

Observer Pattern(옵서버 패턴) 은 객체 간의 일대다(1:N) 관계를 정의하여, 한 객체의 상태가 변경되었을 때 의존 객체들이 자동으로 알림을 받고 갱신되도록 하는 행동(Behavioral) 디자인 패턴입니다.


🧱 Observer Pattern이란?

Observer Pattern은 주체(Subject) 와 옵서버(Observer) 로 역할이 나뉘며, 주체는 자신의 상태 변화를 관찰자에게 통보합니다. 자바스크립트에서는 이벤트 시스템이나 상태 관리 로직에 널리 활용됩니다.

class Subject {
    constructor() {
        this.observers = [];
    }
    subscribe(observer) {
        this.observers.push(observer);
    }
    unsubscribe(observer) {
        this.observers = this.observers.filter(obs => obs !== observer);
    }
    notify(data) {
        this.observers.forEach(observer => observer.update(data));
    }
}

class Observer {
    constructor(name) {
        this.name = name;
    }
    update(data) {
        console.log(`${this.name} 수신: ${data}`);
    }
}

const news = new Subject();
const user1 = new Observer("User1");
const user2 = new Observer("User2");

news.subscribe(user1);
news.subscribe(user2);
news.notify("새로운 뉴스가 도착했습니다!");

✅ 장점

  1. 저결합 구조: 주체와 옵서버 간 의존성이 낮음
  2. 확장성 우수: 옵서버를 자유롭게 추가/제거 가능
  3. 반응형 시스템 구현: 변화 감지 및 자동 갱신 가능

❌ 단점

  1. 성능 문제: 옵서버 수가 많아지면 알림 처리 비용 증가
  2. 디버깅 어려움: 알림 흐름을 추적하기 어려움
  3. 순환 참조 위험: 잘못 설계하면 메모리 누수 발생 가능

🛠️ 실전 예시: 채팅방 사용자 알림 시스템

class ChatRoom {
    constructor() {
        this.users = [];
    }
    join(user) {
        this.users.push(user);
    }
    sendMessage(from, message) {
        this.users.forEach(user => {
            if (user.name !== from) {
                user.receiveMessage(from, message);
            }
        });
    }
}

class ChatUser {
    constructor(name) {
        this.name = name;
    }
    receiveMessage(from, message) {
        console.log(`[${this.name}] ${from}의 메시지: ${message}`);
    }
}

const room = new ChatRoom();
const alice = new ChatUser("Alice");
const bob = new ChatUser("Bob");

room.join(alice);
room.join(bob);
room.sendMessage("Alice", "안녕하세요!");

🧩 결론

Observer Pattern은 사용자 인터페이스, 이벤트 시스템, 실시간 알림 처리 등에서 널리 쓰이는 실시간 반응형 시스템 구현에 적합한 패턴입니다. 단순하면서도 강력한 구조를 갖고 있어, 상태 변화 전파와 객체 간 관계 관리에 있어 필수적인 설계 방식으로 간주됩니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 State Pattern  (1) 2025.04.19
자바스크립트 Strategy Pattern  (0) 2025.04.19
자바스크립트 Command Pattern  (0) 2025.04.19
자바스크립트 Mediator Pattern  (0) 2025.04.19
자바스크립트 Adapter Pattern  (0) 2025.04.19
자바스크립트 Proxy Pattern  (0) 2025.04.19
자바스크립트 Facade Pattern  (0) 2025.04.19
자바스크립트 Decorator Pattern  (0) 2025.04.19
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 Command Pattern
  • 자바스크립트 Mediator Pattern
  • 자바스크립트 Adapter Pattern
  • 자바스크립트 Proxy Pattern
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    php
    블로그
    사고 싶은 책
    Java
    IT 관련
    IT·컴퓨터
    디자인패턴
    jsp
    위시리스트
    자바
    iT's MY LiFE
    자바스크립트유틸
    js패턴
    IT블로그
    It
    SQL
    기초
    읽고 싶은 책
    자바스크립트
    JavaScript
Dongkkase
자바스크립트 Observer Pattern
상단으로

티스토리툴바