티스토리 뷰

iOS/RxSwift

[RxSwift] Subject, Relay, Driver

HarryJeonn 2022. 12. 17. 15:32

https://harryjeon.tistory.com/60

 

[RxSwift] 곰튀김님의 RxSwift 강의 (2)

이전 글 [RxSwift] 곰튀김님의 RxSwift 강의 (1) Subject 만들 때 부터 어떤 데이터를 내보낼지 정해져있다. Observable처럼 값을 받을 수도 있지만 (subscribe) 외부에서 값을 통제할 수도 있다. (onNext) AsyncSubje

harryjeon.tistory.com

곰튀김님의 RxSwift 강의를 듣는 도중 Relay, Subject, Driver가 나왔다.

강의에서 설명을 해주셨고 정리도 해놨지만 조금 더 찾아보려고 한다.

Subject

PublishSubject

초기값이 없다.

다른 Observer가 Subscribe한 순간 아무런 값도 주지 않는다.

Subscribe한 후 데이터가 발생하면 다 준다.

BehaviorSubject

초기값이 있다.

다른 Observer가 Subscribe하면 가장 최근에 발생했던 데이터를 준다.

ReplaySubject

초기값이 없다.

다른 Observer가 Subscribe하면 Subscribe이전의 모든 데이터를 다 준다.

AsyncSubject

초기값이 없다.

Subject가 complete되면 complete시점에서 가장 최근 데이터를 준다.

Relay

RxCocoa에 포함되어있다.

Subject의 Wrapper 클래스로 종료 이벤트로 종료되지 않는다.

onNext가 아닌 accept로 값을 전달받아 subscriber에게 값을 준다.

Error, Completed를 방출하지 않는 Subject이다.

종료되지 않는 특성으로 인해 UI 관련으로 사용한다. UI는 에러가 발생했다고 화면을 안그리거나 stream을 멈추면 안되기 때문이다.

PublishRelay

PublishSubject를 래핑한 것이다.

PublishSubject와 같은 특성을 가지고 있다. (초기값이 없다. 등)

BehaviorRelay

BehaviorSubject를 래핑한 것이다.

마찬가지로 BehaviorSubject와 같은 특성을 가지고 있다.

BehaviorRelay는 현재 값을 출력할 수 있다.

Driver

MainScheduler에서 동작한다.

Error를 방출하지 않는다.

UI Binding에 사용하기 적합하다.

subscribe()이 아닌 drive()를 사용한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함