안녕하세요! Dontotinto입니다 :D
오늘은 RxSwift Subject에 이어서 Relay에 대하여 정리해보도록 하겠습니다!
앞서 Observable과 Observer 그리고 이 두 기능을 합친 Subject를 알아보고 정리해봤는데요.
Subject는 Observable처럼 이벤트를 방출할 수 있고, Observer처럼 이벤트를 전달받아 처리하기도 합니다. 그렇다면 Relay는 Subject와 또 어떠한 차이점을 가지고 있는지 보도록 하겠습니다.
이전 포스팅에서 Subject의 onNext 메소드만 보여주긴 했지만, Subject는 Observable과 마찬가지로 다음 3가지 메소드가 존재합니다.
그러나 Relay는 오직 onNext 메소드만을 호출할 수 있고 terminate 이벤트인 onError와 onCompleted를 호출 할 수 없습니다.
그 의미는 dispose 이외에는 종료되지 않는다는 것을 의미합니다!
UI는 사용자가 입력이나 요청에 따라 지속적으로 업데이트가 되어야 합니다.
그러나 terminate 이벤트가 호출되면 이 후 해당 Observable은 어떤 이벤트도 처리할 수 없게 됩니다!
사용자 입장에서는 더 이상 UI가 업데이트가 되지 않는 모습처럼 보이게 되는 것이죠!
이처럼 Relay는 UI에 조금 더 특화된 클래스라고 봐주시면 될 것 같습니다!
Relay는 next 메소드만 호출하고 처리할 수 있지만, next 대신 accept 키워드를 사용합니다!
Relay는 PublishRelay, BehaviorRelay, ReplayRelay 총 세가지로 나눠볼 수 있습니다!
terminate 이벤트가 없다는 것과, onNext 대신 accept를 사용한다는 점을 제외하면 모두 Subject와 성격이 동일합니다