티스토리 뷰
728x90
👀 Observer 패턴 (관찰자 패턴)
✅ 정의
객체의 상태 변화가 있을 때, 그 변화를 관심 있는 다른 객체(옵저버)에게 자동으로 알려주는 디자인 패턴
즉, **“어떤 객체를 관찰하고 있다가, 변화가 생기면 알려줘!”**라는 구조를 구현하는 방식입니다.
🎯 기본 구성 요소
구성요소 | 설명 |
Subject | 관찰 대상. 상태가 변경되면 옵저버들에게 알림 |
Observer | 변화를 감지하고 반응하는 객체 |
Notify() | Subject가 상태 변화 시 Observer에게 알리는 메서드 |
🧵 구조
Subject (Publisher)
├── observers[] 등록
└── 상태 변경 시 notify() 호출
↓
Observer A (Subscriber)
Observer B (Subscriber)
📦 예제 – 자바 코드
// Observer 인터페이스
interface Observer {
void update(String message);
}
// Subject 클래스
class Subject {
List<Observer> observers = new ArrayList<>();
void addObserver(Observer obs) {
observers.add(obs);
}
void notifyObservers(String message) {
for (Observer obs : observers) {
obs.update(message);
}
}
void changeSomething() {
notifyObservers("변경됨!");
}
}
🔁 Observer 패턴 vs Pub/Sub (발행-구독)
항목 | Observer Pattern | Pub/Sub Pattern |
연결 방식 | Subject가 Observer 직접 참조 | Publisher, Subscriber 간 직접 연결 없음 |
알림 전달 | Subject → Observer 직접 호출 | 중간에 Broker(중재자) 를 둠 |
구현 위치 | 로컬 메모리 내 객체 간 통신 | 네트워크 기반(비동기 메시징) |
예시 | UI 버튼 클릭 이벤트 | Kafka, Redis Pub/Sub, MQTT |
🔄 정리하자면:
Observer는 “코드 내부”의 객체 간 상태 감지,
Pub/Sub는 “분산 시스템”에서의 비동기 통신 방식
📬 이벤트 리스너(Event Listener)
✅ 정의
특정 이벤트가 발생했을 때 실행되는 콜백(callback) 함수
- 보통 UI 프레임워크, 브라우저, Node.js, 게임엔진 등에서 많이 사용
- 내부적으로는 Observer 패턴 기반인 경우가 많음
✅ 예시 (JavaScript)
button.addEventListener("click", () => {
console.log("버튼이 클릭됨!");
});
🔨 대표 적용 사례
분야 | 적용 예시 |
UI 프로그래밍 | 버튼 클릭 → 이벤트 리스너 등록 |
비동기 메시징 시스템 | Kafka, Redis → Pub/Sub 패턴 |
RxJava, RxJS | Observable/Observer 구조 |
React / Vue | 상태 변화 감지 후 자동 리렌더링 |
서버 이벤트 처리 | Spring Event, Node.js EventEmitter |
게임 개발 | 캐릭터 상태 변화 감지, 충돌 이벤트 등 |
🔍 비슷한 듯 다른 개념 차이
개념 | 주 대상 | 실행 시점 | 구조 |
Observer 패턴 | 코드 내부 객체 | 즉시, 동기적으로 | 직접 참조 |
Event Listener | UI/이벤트 객체 | 이벤트 발생 시 | 콜백 함수 등록 |
Pub/Sub | 마이크로서비스, 분산 시스템 | 비동기, 메시지 중계 | 중간 브로커 사용 |
✅ 장점
- 느슨한 결합 (Low Coupling)
- 상태 변화 감지 자동화
- 이벤트 기반 흐름 제어 가능
⚠️ 단점
- 디버깅 어려움 (특히 Pub/Sub)
- 상태 추적 어려움 (누가 누구를 구독하는지 명확하지 않으면)
- 너무 많이 연결하면 이벤트 지옥(Event Hell) 발생 가능
📌 요약
Observer 패턴은 객체 간 상태 변화 감지,
Pub/Sub은 시스템 간 메시지 전달,
Event Listener는 이벤트에 대한 콜백 등록.
728x90
'Programming' 카테고리의 다른 글
Java 큐/스택 계열 컬렉션 비교 (0) | 2025.04.17 |
---|---|
Java 주요 컬렉션 비교표 (0) | 2025.04.17 |
CRON / Scheduler (1) | 2025.04.17 |
Thread / Coroutine / Green Thread (0) | 2025.04.17 |
Path Variable의 개념과 대규모 시스템에서의 영향 (0) | 2025.04.17 |