RxJava에서 Observable, Completable 및 Single의 차이점은 무엇입니까?


113

누구든지 명확한 예제를 통해 RxJava에서 Observable, Completable 및 Single의 차이점을 설명해 주시겠습니까?

어떤 시나리오에서 우리는 다른 것보다 하나를 사용합니까?


경험 한 적이 있습니까?
J. Chomel

나는 최근에 시작했습니다 .. @ J.Chomel
라자 Jawahar

25
이것은 완벽하게 유효한 질문이며 닫혀서는 안됩니다. rx는 훌륭한 라이브러리이지만 문서와 예제는 안타깝게도 매우 가난하고 혼란 스럽습니다.
RunLoop

답변:


247

Observable시간이 지남에 따라 값을 방출하는 이벤트 소스의 일반적인 ReactiveX 빌딩 블록입니다. (따라서 ReactiveX가 확장 된 모든 언어에 존재)
짧은 Observable 이벤트는 다음과 같습니다.
onNext * (onCompleted | onError)? / (* 0 개 이상?-0 개 또는 1 개)

SingleCompletable유형의 감소 표현한다 RxJava에 독점적으로 도입 된 새로운 유형입니다 Observable보다 간결 API를 가지고.

SingleObservable단일 값 또는 오류를 방출한다는 것을 나타냅니다 .

Completable표현 Observable, 그 방출한다 가치가없는,하지만 터미널 이벤트 중 하나 onError또는onCompleted

다음을 반환하는 메서드의 차이점과 같은 차이점을 생각할 수 있습니다.

  • 개체 컬렉션-관찰 가능

  • 단일 개체-단일

  • 값을 반환하지 않는 메서드 (void 메서드)-완료 가능.

Single작업 지향 Observable이 있고 한 번 수행되는 Network 요청 및 반환 값 (또는 오류)과 같은 단일 값을 기대할 때 적합 할 수 있으며, 네트워크 호출이 한 번에 작동하므로 추가 값을 반환 할 것으로 기대하지 않습니다. 시간이 지남에. 또 다른 예는 DB 페치 데이터 작업입니다.

Completable를 가지고 있고 Observable작업으로 인한 값에 대해 신경 쓰지 않거나 아무것도없는 경우에 적합합니다. 예를 들어 캐시를 업데이트하는 경우 작업이 성공 / 실패 할 수 있지만 값은 없습니다.
또 다른 예는 아무것도 반환하지 않는 장기 실행 초기화 작업입니다. 성공 표시만으로 발생한 UPDATE / PUT 네트워크 호출 일 수 있습니다.

어쨌든 Completable과 Single은 새로운 기능을 추가하지 않지만 더 강력하고 간결한 API를 도입하여 API가 노출 한 Observable 뒤에있는 작업에 대해 더 많이 알려줍니다.

편집하다:

RxJava2 Maybe:

RxJava2라는 새로운 유형을 추가 Maybe, Maybe의 조합 Completable및 단일.

위와 같은 언어 에서 어떤 유형 Maybe을 반환하는 메서드로 생각할 수 있으며 Optional, Optional객체에 값이 있는지 여부를 명시 적으로 알려주는 Object(null 대신) Object 주위의 래퍼 입니다.
함께 Maybe우리는 하나 정확히 같은 몇 가지 값을 가질 수 있습니다 Single또는 반환 아무것도 -처럼 Completable. 또한 두 가지 모두와 마찬가지로 오류가 있습니다. 값이 없을 수도 있고 완료 될 수도
Maybe있음을 표시하고 싶을 때 유용 Observable합니다.
캐시에서 예를 가져 오지만 캐시에 반드시 값이있는 것은 아니므로이 경우에는 완료 onNext하고 캐시에서 값을 가져옵니다 .
이것은 또한 RxJava2로 스트림에서 널이 아닌 값을 처리 할 가치가 있습니다.

RxJava2 Flowable:

먼저 배압을 정의하겠습니다. 배압은 데이터가 처리 될 수있는 것보다 빠르게 생성되는 상황을 처리하는 수단입니다. Flowable하류에서 항목을 요청할 수 있도록 배압 지원이 있습니다. 여기 에서 차이점에 대해 자세히 알아볼 수 있습니다 .


2
flowable은 어떻습니까?
Niraj Chauhan

그래서 내가 Kotlin으로 작성한다면 Maybe<T>, 본질적으로 Single<T?>?
AAverin

반환 값 Single이있는 것으로 간주 할 수 Completable있습니까?
Eido95

13
  1. FlowableObservable 은 유한 또는 무한 스트림을 나타낼 수 있습니다. Flowable 지원 배압 .
  2. 단일 은 단일 요소가있는 스트림입니다.
  3. 어쩌면 0 또는 하나의 요소 스트림입니다.
  4. 마지막으로 Completable 은 요소가없는 스트림을 나타냅니다. 즉, 값없이 완료되거나 실패 할 수 있습니다.

간결한 대답은 내가 발견 여기 RXJava 섹션에.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.