티스토리 뷰

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

 

'iOS > RxSwift' 카테고리의 다른 글

[RxSwift] Subject, Relay, Driver  (0) 2022.12.17
[RxSwift] 곰튀김님의 RxSwift 강의 (2)  (0) 2022.12.14
[RxSwift] 곰튀김님의 RxSwift 강의 (1)  (0) 2022.12.12
[RxSwift] RxSwift는 뭔가?  (0) 2022.11.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
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
글 보관함