iOS/RxSwift

[RxSwift] Hot Observable, Cold Observable

HarryJeonn 2022. 12. 18. 18:48

Observable

특정 형태의 데이터를 전달하는 이벤트를 비동기적으로 생성할 수 있는 객체이다.

Hot Observable과 Cold Observable로 구분할 수 있다.

Hot Observable

이름 그대로 뜨거워서 계속 흘리고 있는 스트림

Observable 생성과 동시에 이벤트를 방출한다.

구독 여부와 상관없이 이벤트를 발생시키기 때문에 일단 동작하기 시작하면 리소스를 사용한다.

이전에 방출한 데이터에 대해서는 받을 수 없다.

여러 Observer가 데이터를 공유할 수 있다.

Hot Observable에는 Subject가 있다. 예를들어 API를 호출할 때 여러 부분에서 이 결과가 필요하다면 매번 API를 호출하는 것 보다 그 결과를 공유한다면 더 효과적일 것이다. 이때 Hot Observable을 사용한다.

Cold Observable

차가워서 구독해야만 생성되는 스트림 (차가워서 구독해야 녹아서 흘러내린다고 생각했다.)

구독과 동시에 무조건 동작하며 그 전에는 연산 자원을 소모하지 않는다.

구독했을 때 데이터를 처음부터 받을 수 있다.

각각의 Observer가 있고, 데이터는 공유되지 않는다.

Hot Observable과는 다르게 구독하는 즉시 이벤트가 방출되기 때문에 각 Observer마다 데이터가 다르다.

유튜브 ?

유튜브를 예시로 들면

Hot Observable → 유튜브 실시간 스트리밍 (영상을 시청한 시점부터 시청가능)

Cold Observable → 유튜브 영상 (처음부터 끝까지 시청가능)

으로 들 수 있다.

Hot Observable ↔ Cold Observable

Hot Observable 을 Cold Observable 처럼 또 그 반대로는 사용할 수 없을까?

Hot Observable → Cold Observable

Subject 중 ReplaySubject를 사용해서 구독한 시점에 이전에 발생된 모든 데이터를 방출하여 Cold Observable처럼 사용할 수 있다.

Cold Observable → Hot Observable

이 방법은 Observable 내부에서 데이터를 방출하는 부분을 제외하고는 Observable 외부에서 값을 만들도록 하는 방법 말고는 생각이 나질 않았다. 그래서 ChatGPT에게 물어봤다!

let coldObservable = Observable.of(1, 2, 3)

let hotObservable = coldObservable.publish()

// Subscribe to the hot Observable
hotObservable.subscribe(onNext: { value in
    print("Subscriber 1: Received value \\(value)")
})

hotObservable.subscribe(onNext: { value in
    print("Subscriber 2: Received value \\(value)")
})

// Connect the hot Observable to start emitting items
hotObservable.connect()

// Subscriber 1: Received value 1
// Subscriber 2: Received value 1
// Subscriber 1: Received value 2
// Subscriber 2: Received value 2
// Subscriber 1: Received value 3
// Subscriber 2: Received value 3

publish()와 connect()를 사용하여 변환한 것을 알 수 있었다.

언제 한번 ChatGPT에 대해서도 정리해보면 좋을 것 같다. 나보다 훨씬 똑똑하다.

Reference

ChatGPT: Optimizing Language Models for Dialogue

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com