일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이론
- async
- Kingfisher
- uikit
- 구름톤 유니브
- struct
- 대표
- 프로토콜
- 동시성
- 토이프로젝트
- 실습
- 학과별커뮤니티
- 스트럭트
- swift
- SwiftUI
- 세종대학교
- 기초문법
- ios
- WeatherKit
- collectionview
- 옵셔널
- CS
- Optional
- MVVM
- 반응형
- 네트워크
- RxSwift
- GCD
- 앱개발
- mvc
- Today
- Total
스윞한 개발자
Hot/Cold Observable, Multi/UniCast 본문
안녕하세요! 이번 포스팅에서는 Hot/Cold Observable과 Multi/UniCast에 대해 정리해보겠습니다.
제가 RxSwift를 공부해보며,,, 하면 할수록 늘 새로운거 같아요! 몰랐던 개념들이 참 많은것 같습니다.

반응형 프로그래밍을 공부하다 보면 꼭 나오는 개념들이 있습니다. 바로 Hot / Cold 그리고 Multicast / Unicast입니다. 오늘은 이 네 가지를 한 번 정리해보려고 합니다!
Hot Observable
정의
- 구독과 상관없이 이벤트를 방출할 수 있다.
- 생성되자마자 데이터를 흘려보낼 수 있다.
- 새로운 구독자는 이미 지난 이벤트는 보지 못한다.
특징
- 생성 순간부터 시작 (구독 여부 상관없음)
- Subject가 대표적인 예시
let subject = PublishSubject<Int>()
let disposeBag = DisposeBag()
subject.onNext(0) // 구독자 없을 때 보낸 이벤트는 의미 없음
subject
.subscribe(onNext: { print("\($0)") })
.disposed(by: disposeBag)
subject.onNext(1)
subject.onNext(2)
subject
.subscribe(onNext: { print("\($0)") })
.disposed(by: disposeBag)
subject.onNext(3)
위의 코드에서 구독 이전의 onNext가 있어 언제든지 Emit 할 수 있지만, 구독 시점 이전의 이벤트는 의미 없습니다. 반면 콜드 옵저버블은..
Cold Observable
정의
- 구독 시점에 이벤트를 방출한다.
- 구독자가 등장하기 전까지는 가만히 대기
- 구독자는 처음부터 모든 이벤트를 확인할 수 있다.
특징
- 구독자가 등장해야 스트림 시작
- 대표적인 예: Just, from, of 등
let observable = Observable<Int>.create { observer in
observer.onNext(1)
observer.onNext(2)
observer.onCompleted()
return Disposables.create()
}
let disposeBag = DisposeBag()
observable
.subscribe(onNext: { print("\($0)") })
.disposed(by: disposeBag)
observable
.subscribe(onNext: { print("\($0)") })
.disposed(by: disposeBag)
구독이 시작되어야만 이벤트를 Emit하게 됩니다.
Multicast
정의
- 여러 구독자가 하나의 스트림을 공유한다.
- 스트림이 새로 생성되지 않는다.
- 구독자들은 같은 데이터를 받는다.
특징
- 대표적인 예: Subject
- share()를 쓰면 Cold Observable도 Multicast로 바뀐다.
Unicast
정의
- 구독자마다 새로운 스트림이 생성된다.
- 서로 독립된 스트림을 갖는다.
- 구독자들은 각각 따로 데이터를 받는다.
특징
- 기본적으로 Observable은 Unicast 성격을 갖는다.
- 구독할 때마다 새로운 데이터 흐름이 시작된다.
멀티 캐스트와 유니 캐스트의 예로는 drive, bind의 차이로 볼 수 있습니다. drive는 멀티캐스트의 성격을 띄고 bind는 유니캐스트의 성격을 갖고 있습니다.
즉 drive는 구독자가 여러 개여도 하나의 스트림을 공유합니다. bind는 구독할 때마다 새로운 스트림이 생성됩니다.
Hot | 공유 | 생성 직후 | Subject |
Cold | 미공유 (개별) | 구독 시점 | Just, from, of |
Multicast | 공유 | 상황에 따라 다름 | share(), Subject |
Unicast | 미공유 (개별) | 구독 시점 | Observable |
RxSwift 공부하며 이 네 가지 개념에 대해 정리해보았습니다!
특히 네트워크 요청을 할 때 share()로 중복 요청을 막는다든지, Subject로 이벤트를 공유하는 패턴을 쓸 때 제대로 이해하고 적절히 써야 할것 같습니다..ㅎㅎ 지금까지 너무 막 써온 거 같아 죄책감이 드네요..!
다음 포스팅은 더 유익한 글로 찾아오겠습니다! 잘못된 내용에 대한 피드백은 언제나 환영입니다. 감사합니다!!

참고된 글
https://ios-development.tistory.com/1334
[iOS - swift] RxSwift의 share() 알고 사용하기 (Hot Observable, Cold Observable)
Hot Observable과 Cold Observable 개념 hot observable 이벤트를 발행할때 observer가 있든 없든 바로 방출하는 것 여러 observer가 구독해도 모두 같은 데이터를 발행 ex) PublishSubject, BehaviorSubject cold observable 이벤
ios-development.tistory.com
'Swift 이론' 카테고리의 다른 글
DB Transaction / ACID (0) | 2025.03.17 |
---|---|
DAO, DTO, Entity + Repository Pattern (2) | 2025.02.17 |
DiffableDatasource의 이해 (0) | 2025.02.16 |
iOS - ARC(Swift 메모리 관리 기법) (2) | 2025.02.09 |
Actor 톺아보기 👀 (1) | 2025.02.04 |