RxJava로 안전하게 이벤트 통지를 실시하기 위한 RxRelay
이번에는 RxRelay라는 라이브러리를 소개하려고합니다.
※ RxJava에 대한 기초 지식은 있는 것을 전제로 한 기사입니다.
RxRelay란?
Relay는 Subject에서
onComplete
와 onError
를 호출하는 기능을 없애고, 즉 onNext
에서 값을 흘리는 것에 특화한 Subject라고 할 수 있습니다. Relay는 다음과 같은 특성과 기능을 가지고 있습니다.Observable
및 Consumer
로 행동 accept
에서 받은 값을 onNext
로 흘리기 observable.subscribe(relay)
는 Disposable을 반환하므로 구독 취소가 간단합니다 toSerialized()
호출하여 스레드로부터 안전한 Relay를 생성 할 수 있습니다 AsyncSubject
에 해당하는 AsyncRelay
없음 (스트림 종료 없음) 이러한 특성으로 인해 Relay는 비Rx API를 Rx용 이벤트 스트림으로 변환하는 데 매우 적합합니다.
Relay의 사용 장소
Subject를 사용하고 있어
onNext
로 값을 흘리고 있는 것만은 Relay 로 옮겨놓을 수가 있습니다.예를 들어, RxBinding을 사용하여 MVVM의 데이터 바인딩 (Android의 DataBinding Library가 아님)을 구현하는 패턴으로 버튼 클릭 이벤트를 ViewModel에 알리고 싶다면 Subject로 작성하면 다음과 같습니다.
class SomeViewModel {
val onButtonClick = PublishSubject.create<Unit>()
}
val viewModel = SomeViewModel()
button.clicks()
.subscribe { viewModel.onButtonClick.onNext(Unit) }
.addTo(...)
이것을 Relay로 바꾸면,
class SomeViewModel {
val onButtonClick = PublishRelay.create<Unit>()
}
val viewModel = SomeViewModel()
button.clicks()
.subscribe(viewModel.onButtonClick)
.addTo(...)
이렇게 깔끔하게 쓸 수 있어
onNext
가 배제되어 데이터 바인딩의 리액티브감도 보다 높아진다고 생각합니다. (개인의 감상입니다)RxSwift에도 수입
RxSwift에도 RxSwift4에서 Relay가 도입된 것 같습니다. 정확하게는, Cocoa/UIKit와의 바인딩을 제공하는 RxCocoa 쪽에 도입되었습니다만, 거의 표준의 기능이라고 말해도 좋을 것입니다.
참고 기사:
ht tp // ch. 메르카리. 코m/엔트리/2017/12/04/103247
ht tp // ch. 이런 사람. 코 m / 엔 트리 / ゔ 리아 b ぇ- s-p
RxJava/RxSwift로 양 OS용 앱을 개발하고 있는 몸으로서는 매우 도움이 됩니다
RxJava도 Relay를 표준 기능으로 도입해도 좋은 생각이 들었습니다.
추가: RxJS에도
방금 기사를 쓴 며칠 후이지만 RxJS 용 Relay도 출시되었습니다. (게다가 Microsoft제)
이상입니다.
Reference
이 문제에 관하여(RxJava로 안전하게 이벤트 통지를 실시하기 위한 RxRelay), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakajika/items/0db64ec6de370d0613f1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)