Which type to use?(어떤걸 사용 해야하지?)
2022. 5. 26. 12:28ㆍReactiveX/RxJava
Base classes
RxJava 3 features several base classes you can discover operators on:
- io.reactivex.rxjava3.core.Flowable: 0..N flows, supporting Reactive-Streams and backpressure
- io.reactivex.rxjava3.core.Observable: 0..N flows, no backpressure,
- io.reactivex.rxjava3.core.Single: a flow of exactly 1 item or an error,
- io.reactivex.rxjava3.core.Completable: a flow without items but only a completion or error signal,
- io.reactivex.rxjava3.core.Maybe: a flow with no items, exactly one item or an error.
Rajava를 사용 함에 의해서 고려해야 하는 문제
배압 과 메모리 이슈
(MissingBackpressureException, OutOfMemoryError.)
Observable을 사용하는 경우
- 가장 긴 요소의 흐름은 1000개 이하입니다. 즉, 시간이 지남에 따라 요소가 너무 적어 응용 프로그램에서 OOME가 발생할 가능성이 거의 없습니다.
- 마우스 이동 또는 터치 이벤트와 같은 GUI 이벤트를 처리합니다. 이러한 이벤트는 합리적으로 역압박되는 경우가 거의 없으며 자주 발생하지 않습니다. Observable을 사용하여 1000Hz 이하의 요소 주파수를 처리할 수 있지만 어쨌든 샘플링/디바운싱 사용을 고려하십시오.
- 흐름은 기본적으로 동기식이지만 플랫폼이 Java Streams를 지원하지 않거나 기능이 누락되었습니다. 를 사용하면 Observable일반적으로 오버헤드가 Flowable. (Java 6+를 지원하는 Iterable 흐름에 최적화된 IxJava도 고려할 수 있습니다.) .
Flowable을 사용하는 경우
- 어딘가에서 어떤 방식으로 생성된 10,000개 이상의 요소를 처리하고 따라서 체인은 생성하는 양을 제한하도록 소스에 지시할 수 있습니다.
- 디스크에서 파일 읽기(파싱)는 본질적으로 차단 및 풀 기반이며, 이는 사용자가 제어할 때 역압과 잘 작동합니다(예: 지정된 요청 양에 대해 이 파일에서 읽는 줄 수).
- JDBC를 통해 데이터베이스에서 읽는 것도 차단 및 풀 기반이며 ResultSet.next()가능한 각 다운스트림 요청을 호출하여 사용자가 제어합니다.
- 네트워크가 도움이 되거나 사용된 프로토콜이 일부 논리적 양 요청을 지원하는 네트워크(스트리밍) IO.
- 나중에 비차단 반응 API/드라이버를 얻을 수 있는 많은 차단 및/또는 풀 기반 데이터 소스.
Single 사용하는 경우
- 하나의 성공적인 값 또는 오류만 내보낼 수 있다는 점 을 제외하고 observable 와 유사하게 작동 합니다
- 데이터가 발행과 동시에 onSuccess로 종료되므로 주로 한 번의 데이터만 발행하는 API 통신, Client 요청에 대응하는 서버의 응답에 많이 사용한다.
- 오직 1개의 데이터를 전달하는 생산자다.
- Http GET Request와 같이 결과가 1개의 데이터 or 실패인 경우 사용한다.
Completable
- 0개의 데이터를 전달하는 생산자다.
- db에 insert, update와 같이 데이터가 필요 없이 성공 or 실패인 경우 사용한다.
Maybe
- 0개 또는 1개의 데이터를 전달하는 생산자다.
- 예 / 아니오 선택과 같이 (둘 중 하나 + 예외 경우)에 쓸 수 있다.
- 최대 1개의 원소가 방출될 수 있기 때문에, Maybe 유형은 배압에 대한 개념이 없다.
참고사이트
https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#when-to-use-observable
'ReactiveX > RxJava' 카테고리의 다른 글
Rxjava Observable (0) | 2022.05.26 |
---|