apple/RxSwift, ReactorKit

RxSwift - Relay와 Subject

lgvv 2021. 7. 12. 14:53

RxSwift - Relay와 Subject

 

기본적인 부분 외에 공식문서에서 추가적으로 필요한 부분을 학습 진행

 

 

목차

1. Subject란?

2. Relay란?

3. Subject와 Relay의 차이점

 

 

1. Subject란?

 - RxSwift 4시간 강의에서는 Observable의 경우에는 우리가 준 값만 확인할 수 있지만, 좀 더 나아가 개발을 할때 실시간으로 Observable에 값을 추가하고 Subscriber를 할 수 있는 스트림이 필요함.

이때 Observable이자 Observer인것을 Subject라고 부름.

 

 

Observable + Observer = Subject

 

 

 

 

2. Relay란?

- Relay Class는 RxCocoa4에서 구현되었고, PublishRelay BehaviorRelay클래스가 존재.
- RxSwift인Subject와는 다르게Relay는 RxCocoa의 클래스

 

1. PublishRelay 

- PublishRelay는 PublishSubject의 Wrapper 클래스
- PublishSubject의 특성처럼 구독 이후의 발생하는 이벤트들만 알 수 있음.

PublishRelay

 

2. BehaviorRelay

- BehaviorRelay는 BehaviorSubject의 Wrapper 클래스
- .value를 통해서 현재의 값을 가져올 수 있음
- variable이 Deprecate되면서 소개시켜드리지 않았지만 대신에 BehaviorRelay를 사용.

BehaviorRelay

 

Subject와 Relay의 차이점

- Subject는 .completed, .error의 이벤트가 발생하면 subscribe가 종료
 - Relay는 .completed, .error를 발생하지 않고 Dispose되기 전까지 계속 작동하기 때문에 UI Event에서 사용하기 적절

 


그러니까 쉽게 말해서 UI Event의 경우에는 Infinity라서 disposed되기 전까지 계속 사용 가능하다는 의미