apple/RxSwift, ReactorKit

🐉 RxSwift(Relay와 subject)

lgvv 2021. 7. 12. 14:53

✅ 이번 시간에는 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의 특성처럼 구독 이후의 발생하는 이벤트들만 알 수 있습니다.

PublishRelay

 

2️⃣ BehaviorRelay

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

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/

 

[RxSwift] Subject와 Relay - (3) - jinShine

지난 블로그Observable편에서 Observable이 무엇이고 어떻게 만드는지에 대해 배웠습니다. 이번장에선 Observable이자 Observer인 Subject의 개념에 대해 알아보도록 하겠습니다. Subject란 좀 더 나아가 개발

jinshine.github.io