Rx를 학습하는 단계이므로, 다른 사이트의 글을 적극 추천합니다.
또한, 잘못되거나 부족한 내용 등, 피드백 감사합니다!
———————————————————————————————————————————————————
안녕하세요. Skillist입니다
오늘은 Subject 문서를 읽어볼게요.
이번엔 그림으로 설명하는 "마블"이 포함되어있습니다.
직관적이고 리엑티브X를 공부하는데에 있어서 꼭 필요한 그림이기에, 많이 익혀두세요.
https://reactivex.io/documentation/subject.html
———————————————————————————————————————————————————
- 요약 -
(RxSwift 기준입니다)
서브젝트는 옵저버이며 옵저버블입니다.
따라서 하나이상의 옵저버블을 구독할수 있으며 새로운 항목을 방출할 수 있습니다.
또한 cold 옵저버블을 hot 옵저버블로 만들수도 있습니다.
서브젝트는 4가지가 있습니다. (설명할 서브젝트의 순서는 제가 임의로 변경했습니다.)
PublishSubject :
PublishSubject는 subscribe한 이후에 발생한 이벤트를 방출합니다.
주의할 점은, PublishSubject는 create 시점부터 즉시 항목들을 방출합니다.
따라서, create와 subscribe 사이에 방출된 이벤트를 놓칠 수 있습니다.
이를 피하기 위해선, create로 옵저버블을 구현하거나, ReplaySubject를 사용해야 합니다.
에러가 발생한다면, 에러를 방출합니다.
BehaviorSubject :
BehaviorSubject는 구독 시 기본값이나 가장 최근 값을 방출합니다. 또한, 방출된 아이템을 계속하여 방출합니다.
구독 이후 에러로 종료되면, 더이상 아이템을 방출하지 않고 에러 이벤트를 방출합니다.
ReplaySubject :
구독 시점과 상관없이, 여태까지 방출한 모든 아이템을 구독 이후에 방출합니다.
방출할 버퍼 사이즈와 특정 시간 범위를 지정할 수 있습니다.
ReplaySubject를 옵저버로 사용할 때, 멀티쓰레드 환경에서 onNext 메소드(다른 on 메소드 포함)를 호출하지 않도록 조심해야 합니다.
AsyncSubject :
소스 옵저버블이 마지막 값을 방출하고 complete된 후에, 값을 방출합니다.
소스 옵저버블이 방출한 값이 없다면, AsyncSubject 또한 값을 방출하지 않습니다.
하지만 소스 옵저버블에 에러가 발생하면, AsyncSubject는 값 방출하지 않고, 에러를 방출합니다.
———————————————————————————————————————————————————
리엑티브엑스를 공부해보신 분들은 많이 익숙한 녀석들일거에요.
아직까진 쉽죠??
'iOS 개발 > Rx 시리즈' 카테고리의 다른 글
Rx시리즈 - Observable 문서 읽고 요약 (0) | 2022.01.12 |
---|---|
RxSwift, RxCocoa 공부 다짐 (0) | 2022.01.10 |