Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- moya
- MaxHeap
- BidirectionalCollection
- reversed
- 입력
- Asnyc
- Python
- 사내배포
- 전자출입
- ReactorKit
- RxSwift
- hitTest
- 공백
- readLine
- DISPATCH
- AVCaptureSession
- Custom Class
- delays deallocation
- binder
- input
- Combine
- weak self
- vtable
- async
- ios
- Responder chain
- URLSession
- swift
- UserDefaults
- UIResponder
Archives
- Today
- Total
틈틈히 적어보는 개발 일기
[RxSwift] Chapter 3: Subjects 본문
Chapter 3: Subjects
Subject
observable과 observer의 역할을 모두 한다.
Observable과 Subject는 하나의 매우 중요한 차이를 가진다. Observable은 단지 하나의 함수이기 때문에 어떤 상태도 가지지 않으므로 모든 새로운 Observer에 대해 관찰 가능한 create 코드를 반복해서 실행한다. 코드는 각 관찰자에 대해 실행되므로 HTTP 호출인 경우 각 관찰자에 대해 호출된다. 이로 인해 주요 버그와 비효율이 발생한다. 반면 Subject는 관찰자 세부 정보를 저장하고 코드를 한 번만 실행하고 모든 관찰자에게 결과를 제공한다.
💡 Observable은 .create를 통해 생성되고 클로저 내부에 어떤 값을 반환할지 선언해둠. 그러니까 subscribe가 일어날 때 단순한 1회성 값으로 계속 생성해서 뱉어내기에 ‘상태를 저장’할 수가 없음!!
PublishSubject
빈 값으로 시작, 새 값이 들어올 때만 subscriber에게 이벤트 방출
BehaviorSubject
initial 값으로 시작, 가장 최근 값(init value 포함)을 이벤트로 방출
ReplaySubject
새로운 구독시에 일정한 크기의 이전 값들을 저장하여 방출한다. 기본적으로 onNext 때의 로직은 위와 동일하나 새로운 구독이 일어났을 때 특정 크기의 이전 값들을 방출해줌!
AsyncSubject
Complete 시기에 가장 최근의 이벤트를 방출한다. 에러를 발생했다면 이벤트를 방출하지 않고 에러를 그대로 방출한다.
Relay (non-terminating sequence)
💡 next만 방출하는 Subject의 래핑 객체. complete나 error를 방출하지 않는다.
- PublishRelay
- BehaviorRelay
'📱 iOS, Swift > 🐉 RxSwift' 카테고리의 다른 글
[RxSwift] Chapter 5: Filtering Operators (0) | 2022.06.08 |
---|---|
[RxSwift] Chapter 1: Hello, RxSwift (0) | 2022.04.17 |
Comments