티스토리 뷰
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
- delegate
- Login
- ObservedObject
- 곰튀김
- navigation
- MVVM
- enumerations
- AWS Fargate
- CodingTest
- Protocol
- kakao
- frame과 bounds 차이
- IOS
- ChatGPT
- Custom
- tabview
- Generic
- Swift
- AWS
- strcut
- 카메라
- Git
- SwiftUI
- 의미있는이름
- OCR
- docker
- onTapGesture
- rxswift
- file private
- Xcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |