본문 바로가기

iOS 개발/Rx 시리즈

Rx시리즈 - Subject 문서 읽고 요약

반응형

Rx를 학습하는 단계이므로, 다른 사이트의 글을 적극 추천합니다.

 

또한, 잘못되거나 부족한 내용 등, 피드백 감사합니다!

 

———————————————————————————————————————————————————

 

안녕하세요. Skillist입니다

 

오늘은 Subject 문서를 읽어볼게요.

 

이번엔 그림으로 설명하는 "마블"이 포함되어있습니다.

직관적이고 리엑티브X를 공부하는데에 있어서 꼭 필요한 그림이기에, 많이 익혀두세요.

 

https://reactivex.io/documentation/subject.html

 

ReactiveX - Subject

If you have a Subject and you want to pass it along to some other agent without exposing its Subscriber interface, you can mask it by calling its asObservable method, which will return the Subject as a pure Observable. See Also

reactivex.io

 

———————————————————————————————————————————————————

 

- 요약 -

 

(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