🐉 RxSwift(Relay와 subject)
✅ 이번 시간에는 Relay에 대해서 알아볼 예정이야.
공부하면서 보니까 bind, asDriver, drive, relay 등의 표현이 많이 나오는데 공식문서에는 따로 확인할 수 없던 부분이라 학습을 추가적으로 진행하기로 했음.
(목차)
1. Subject란?
2. Relay란?
3. Subject와 Relay의 차이점
4.
5.
✅ 1. Subject란?
- RxSwift 4시간 강의에서는 Observable의 경우에는 우리가 준 값만 확인할 수 있지만, 좀 더 나아가 개발을 할때 실시간으로 Observable에 값을 추가하고 Subscriber를 할 수 있는 놈이 필요합니다.
이때 Observable이자 Observer인것을 Subject라고 합니다.
Observable + Observer = Subject
쉽게 말해서 외부의 값을 받아다가 사용할 수 있다는 말이다..!
이벤트를 외부에 전달해줄 경우에 사용해서, Delegate대신 사용하기도 합니다.
✅ 2. Relay란?
- Relay Class는 RxCocoa4에서 구현되었고, PublishRelay와 BehaviorRelay클래스가 존재합니다.
RxSwift인 Subject와는 다르게 Relay는 RxCocoa의 클래스 입니다.
1️⃣ PublishRelay
PublishRelay는 PublishSubject의 Wrapper 클래스입니다.
PublishSubject의 특성처럼 구독 이후의 발생하는 이벤트들만 알 수 있습니다.
2️⃣ BehaviorRelay
BehaviorRelay는 BehaviorSubject의 Wrapper 클래스 입니다.
.value를 통해서 현재의 값을 가져올 수 있습니다.
variable이 Deprecate되면서 소개시켜드리지 않았지만 대신에 BehaviorRelay를 사용하시면 됩니다.
✅ 3. Subject와 Relay의 차이점
그렇다면 둘의 차이점은 무엇일까?
~Subject는 .completed, .error의 이벤트가 발생하면 subscribe가 종료되는 반면,
~Relay는 .completed, .error를 발생하지 않고 Dispose되기 전까지 계속 작동하기 때문에 UI Event에서 사용하기 적절합니다.
그러니까 쉽게 말해서 UI Event의 경우에는 Infinity라서 disposed되기 전까지 계속 사용 가능하다는 의미이다!
(참고)
https://jinshine.github.io/2019/01/05/RxSwift/3.Subject%EB%9E%80/