반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 머신러닝
- 데이터베이스
- 파이썬
- I'm Sorry
- 데이터분석
- 인공지능
- 데이터과학
- 네트워크
- 소프트웨어공학
- 알고리즘
- Yes
- 컴퓨터공학
- 네트워크보안
- 자바스크립트
- 웹개발
- 클라우드컴퓨팅
- 보안
- 자료구조
- 프로그래밍
- 딥러닝
- 빅데이터
- 버전관리
- 컴퓨터비전
- 프로그래밍언어
- 컴퓨터과학
- 사이버보안
- 디자인패턴
- springboot
- 소프트웨어
- 데이터구조
Archives
- Today
- Total
스택큐힙리스트
“구독 · 알림 · 자동 반응” — Observer 패턴 한눈에 이해하기 본문
반응형
변화가 생기면 알아서 퍼지게 하자! 이벤트 버스·알림 시스템의 기본 뼈대
Observer가 뭐길래?
Observer(옵저버) 패턴은 “관찰 대상(Subject)”과 “구독자(Observer)” 사이에 느슨한 연결을 만들어,
대상에게 변화가 생길 때마다 구독자에게 자동으로 알림을 뿌려 주는 행위(Behavioral) 패턴입니다.
쉽게 말해 “뉴스레터 발송” 구조와 똑같습니다 — 발행인이 기사(상태)를 갱신하면, 구독자 메일함(반응)이 자동으로 울리니까요.
언제 유용할까?
- 이벤트 버스: Spring ApplicationEventPublisher처럼 서비스 곳곳에서 발생한 도메인 이벤트를 한 줄로 발행 → 여러 리스너가 동시에 처리
- UI 데이터 바인딩: Jetpack Compose·SwiftUI 같은 선언형 UI가 상태 변화를 감지해 화면을 즉시 재구성
- 실시간 알림 시스템: 새로운 게시글, 댓글, 거래 완료 등 웹훅·푸시·이메일을 병렬 전송
- 캐시 무효화: 원본 데이터가 수정되면 캐시 저장소들에게 “리로드” 신호 발사
구조를 말로 툭
- Subject: 구독 목록 보관, 상태 변화 시 notify() 호출
- Observer: update() 메서드를 구현해 반응 로직 작성
- Loose Coupling: Subject는 “누가 구독했는지” 모른 채 알림만 전송 → 확장·테스트가 쉬워짐
Kotlin 코드 감각 익히기
interface Observer { // 구독자 규약
fun update(msg: String)
}
class User(private val name: String) : Observer {
override fun update(msg: String) = println("$name 알림: $msg")
}
class PostService {
private val subs = mutableSetOf<Observer>() // 구독 목록
fun subscribe(o: Observer) = subs.add(o)
fun unsubscribe(o: Observer) = subs.remove(o)
fun writePost(title: String) {
println("새 글 등록: $title")
subs.forEach { it.update(title) } // 변화 알림
}
}
fun main() {
val service = PostService()
val a = User("민수"); val b = User("지은")
service.subscribe(a); service.subscribe(b)
service.writePost("Observer 패턴, 이렇게 쉽다!") // 둘 다 알림
service.unsubscribe(a)
service.writePost("다음 편 예고") // 지은만 알림
}
핵심 포인트: PostService는 “알려야 하는 사실”만 관심 있고,
알림 이후 무엇을 할지는 Observer 쪽에서 자유롭게 결정합니다.
장단점 한 줄 정리
- 장점: 결합도↓, 확장성↑, 이벤트 기반 아키텍처와 찰떡
- 단점: 구독자 수 많아지면 호출 순서·오류 처리·성능 튜닝 필요
반응형
'개발' 카테고리의 다른 글
Redis Pub/Sub로 5초 만에 터지는 알림, 멀티 인스턴스에서도 놓치지 않는 비결 (0) | 2025.07.22 |
---|---|
setState vs Provider, 무엇이 다를까? (0) | 2025.07.22 |
함수 타입 vs 클래스 구현 – Kotlin Strategy 패턴 성능 벤치마크 실험기 (4) | 2025.07.22 |
고차함수로 끝내는 Strategy 패턴, 딱 3줄! (0) | 2025.07.22 |
코틀린 Strategy 패턴 한방에 이해하기 – 알고리즘을 ‘핫스왑’하는 가장 간단한 방법 (0) | 2025.07.21 |
Comments