TIL
[TIL] RxSwift 간단 요약 정리
picel
2024. 4. 3. 20:31
Observable VS Observer
Observable
Observer
Subscribe
- Observable과 Observer 사이를 연결하여 Stream(데이터 흐름)을 생성
Subject
- 등장 배경
- Observable은 이벤트 방출만 할 수 있고, 이벤트에 대한 처리를 하지 못함
- 따라서 Observable과 Observer 역할을 모두 수행할 수 있는 Subject가 등장
- 종류
- PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject
- 이중 PublishSubject, BehaviorSubject가 주로 사용된다.
PublishSubject
- 초기값이 없는 빈 상태로 시작
- 구독(Subcribe) 이후 시점부터 emit 되는 이벤트를 처리할 수 있는 특서을 가지고 있음
- 구독(Subcribe) 이전에 emit된 이벤트들은 무시
BehaviorSubject
- 초기값 필수 (PublishSubject와의 차이점)
- 구독(Subscribe) 이전에 방출(emit)한 이벤트가 있다면, 가장 최근에 전달된 이벤트 하나를 전달
- 구독(Subscribe) 이전에 방출(emit)한 이벤트가 없다면 초기값 전달
- 뷰를 미리 채워두는데 용이
Relay
- Subject와 거의 유사한 특성을 가지고 있음
- Subject와 가장 큰 차이는 Completed와 Error 이벤트가 없음
- 따라서 Relay는 UI 용도로 많이 사용됨
- 왜냐하면 UI가 Completed와 Error 이벤트를 받게 된다면 더 이상 next 이벤트를 전달받을 수 없게 되고 그렇다면 반응형의 장점이 사라지기 때문
- Completed나 Error 이벤트를 받고 나면 disposed 상태가 되는데, Relay는 Completed나 Error 이벤트를 받지 못하니 disposed가 호출되는 deinit 시점이나 직접 처리를 해주어야 합니다.
- 그래서 Relay는 next 이벤트만 처리
- Relay는 next 이벤트를 accept 라는 키워드로 대체
- 종류
- PublishRelay, BehaviorRelay 등이 있다.
- 위 두 Relay가 주로 사용됨
정리
Name |
next |
error |
complete |
Observable |
O |
O |
O |
PublishSubject |
O |
O |
O |
BehaviorSubject |
O |
O |
O |
PublishSubject |
O |
X |
X |
BehaviorRelay |
O |
X |
X |
Driver
- 메인 스레드에서 실행 보장
- UI에 특화된 Observable, 구독(Subscribe)만 할 수 있고 값을 변경할 수 없음
- Driver는 구독(Subscribe)의 의미를 drive로 표현
- bind와 달리 스트림(Stream) 공유가 됨
- drive는 내부적으로 share(replay:1, scope: .whileConnected)로 구현