[RxSwift] 5. Relay

3381 단어 rxswiftrxswift

RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀


Relay

Relay의 필요성

이전에 Subject를 정리했던 에서, 예시로 들었던 코드가 있다.

//MARK: BehaviorSubject
let bs = BehaviorSubject<String>(value: "")

bs.subscribe { print(checkEmail(email: $0))}
.disposed(by: disposeBag)

bs.onNext("ii")
bs.onNext("iii")
bs.onNext("iii@")
bs.onNext("iii@g")

BehaviorSubject 는 에러이벤트를 전달할 수 도 있다. 그리고 에러이벤트를 받게 되면, Observable은 종료가 된다.
말인 즉슨, 오류로 인해 원치 않게 종료가 될수도 있다는 뜻이다.

만약, 유저가 입력하는 과정에서 오류로 인해 입력을 하지 못한다면..🤦 사용에 불편함을 줄 뿐만 아니라 치명적인 오류이다.

이렇게 종료없이 지속되는 상황에 적절히 쓸수 있는 것이 Relay이다.

따라서, 실제 앱에서 위와 같은 기능을 구현하고 싶다면, BehaviorSubject가 적절하다고 생각한다.

특징

1. completed, error 이벤트를 전달하지도 받지도 않는다.
2. dispose 되기 전까지 종료가 되지 않는다.

Relay 에는 PublishRelay, BehaviorRelay, ReplayRelay가 있다.
RxSwift6에서 ReplayRelay가 추가가 되었다.

PublishRelay의 definition을 보면 relay는 subject를 wrapping하고 있음을 할 수 있다.
그리고 subject와 달리, error, completed로 인해 종료되지 않는다는 것을 알 수 있다.

결론적으로 이러한 두 특징때문에 종료없이 지속되는 UI event를 처리하는데 주로 사용된다.

이벤트 전달

subject에서 이벤트 전달은 onNext 를 활용하였다. 반면에 relay의 경우는 accept 를 활용한다.


다음엔, 각 Relay에 대해 간단히 정리해보겠다.

좋은 웹페이지 즐겨찾기