RxSwift -4 Subject Deep Dive

김윤홍·2024년 8월 14일
0
post-thumbnail

이번에는 각각의 Subject들을 조금더 깊게 알아보자!

PublishSubject는 어떻게 정의 되어있을까?

Subject의 문서를 살펴보면 위처럼 Observable을 상속하고 있으며, ObserverType을 채택 하고 있는 것이 보인다 이로써, Subject는 Observable의 역할과 Observer역할을 둘 다 수행하는 것을 알 수 있습니다.

그럼 Cancelable은? Cancaelabel은 protocol로 구현이 되어있는데 구독이 취소되어있는지 확인한다.

참고 dispose의 사전적의미는 처리하다, 없애다라는 뜻이다.

그리고 다양한 변수 들이 존재하는데 한 번 살펴 보겠슴다.

hasObservers는 현재 구독자가 있는지 확인합니다.
disposed: 이 주제(subject)가 폐기되었는지 여부를 나타냅니다.
observers: 현재 구독된 모든 관찰자를 저장하는 컬렉션입니다.
stoppedEvent: 주제가 완료되거나 에러가 발생한 이벤트를 저장합니다.

전체적인 흐름을 한번 보면

  1. 구독: subscribe 메서드가 호출되면, 새로운 관찰자가 observers 리스트에 추가됩니다. 이 관찰자는 PublishSubject가 이벤트를 발행할 때 그 이벤트를 받게 됩니다.

  2. 이벤트 발행: on(_ event:) 메서드를 통해 이벤트가 발행되면, 모든 구독자에게 그 이벤트가 전달됩니다.

  3. 구독 취소: dispose 메서드가 호출되면, PublishSubject는 더 이상 이벤트를 발행하지 않으며, 모든 구독자가 제거됩니다.


그럼 BehaviorSubject는??

BehaviorSubject는 PublishSubject와 달리 초기값을 갖기 때문에

위의 사진처럼 정의되어 있는 것을 확인 할 수 있습니다.


AsyncSubjct 살펴보기

위의 사진을 살펴보면 프로퍼티 옵저버로 isStopped를 계속살펴보다가 nil이면 멈추게 되는데 nil이 되는경우는 아래의 사진 처럼 구현이 되어있다.

또한 변수의 이름처럼 lastElement에서 알 수 있듯이 마지막값(최신의 값)을 저장하고 방출을 한다


마지막 ReplaySubject 살펴보기

역시 ReplaySubject에서 눈에 띄는 부분은 bufferSize인데 bufferSize에 따라서 최근에 전달된 값들이 방출되기 때문에 AsyncSubject와 비슷한 부분이 있다..!


0개의 댓글

관련 채용 정보