-
RxSwift Observable, Subjects and RelaysSwift/RxSwift 2022. 10. 1. 23:57
Subject
Observable 이면서 observer 일 수 있음.
(== 데이터를 방출 (emit), 구독 (subscribe) 할 수 있음. )
PublishSubject: empty 로 시작해서 subscribers 에게만 새로운 elements 를 emit
BehaviorSubject: 초기값을 가짐. 초기 값 또는 가장 최근 element 를 new subscribers 에게 emit 해줌(replay)
ReplaySubject: buffer size 만큼 초기화 되고, 해당 size 만큼의 element 를 지니고 있다가 new subscribers 에게 emit
AsyncSubject: subject 가 complete event 를 받을 때만 가장 마지막 next event 값을 emit. (거의 사용하지 않음)
Relay
PublishRelay, BehaviorRelay: 각각 wrap PublishSubject, BejaviorSubject. Next events 를 accept, relay 만 할 수 있음.
Relay 에 대해서 completed, error event 를 넣어줄 수는 없음. 그러므로 끝나지 않는 sequences 상황에서 매우 유용함.
----------------------------------------------------------------------------------------------------------------------
PublishSubject
Subscribe 한 시점 부터 unsubscribe 또는 complete, error 로 끝날때 까지
새로운 event 에 대해 notified 받기를 원할 때 사용하기 유용함.
How Publish Subject works 1번째 Line 은 Publish Subject, 2,3 번째 Line 은 Subscribers.
또한 위로 향하는 화살표는 'subscription' 을, 아래로 향하는 화살표는 'emitting event'. 이다.
event 1 이 추가 된 후 두번째 line 이 subscription 했을 때, publish subject 는 아무런 값도 방출하지 않는다.
대신, 그 후 event 2 가 추가되었을 때 두번째 line 에게 event 2 를 방출한다.
BehaviorSubject
PublishSubject 와 비슷하게 작동하지만, 가장 최근에 추가한 값 새로운 subscribers 에게 emit 한다는 점에서 큰 차이가 있다.
How Behavior Subject works 위 PublishSubject 에서와 화살표, Lines 의 의미는 동일하다.
다만, 이때는 두번째 Line 이 Subscription 했을 때 즉시 초기 값 event 1 을 emit 한다는 것,
동일하게 세번째 Line 이 Subscription 했을 때 즉시 가장 최근 값 event 2 을 emit 한다는 것 이 PublishSubject와 다른 점이다.
ReplaySubject
본인이 원하는 만큼 크기의 buffer 를 이용해서 최근 elements 를 저장 후 새로운 subscriber 에서 방출해준다.
두번째 Line 은 이미 ReplaySubject 를 Subscription 한 상태이다.
event 1, 2 가 잇따라 추가된 후, 나중에 세번째 Line 이 Subscription 을 하게되면 (2 이상의 size 를 지정해주었다고 가정) 이전 2개 이벤트가 바로 방출되게 된다.
Relays
위 marble diagrams 에서, 마무리 세로선이 없는 경우를 생각하면 된다. (Error, Complete event 는 일어날 수 없음.)
'Swift > RxSwift' 카테고리의 다른 글
ReactorKit 으로 로그인 페이지 만들기 (0) 2022.10.14 RxAlamofire (0) 2022.10.03 UITableView (with RxSwift) (2) 2022.09.30 Login Validation (simple..) RxSwift 구현 (0) 2022.09.29 RxSwift basic test (count 1씩 올리기) (0) 2022.09.28