250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Hot/Cold Observable, Multi/UniCast 본문

Swift 이론

Hot/Cold Observable, Multi/UniCast

스윞남 2025. 3. 4. 09:23
728x90
반응형
SMALL

안녕하세요! 이번 포스팅에서는 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

 

728x90
반응형
LIST

'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