Learn & Run

RxJava - 또 다른 생산자 Single, Maybe와 Completable 본문

Java

RxJava - 또 다른 생산자 Single, Maybe와 Completable

iron9462 2021. 1. 12. 18:40

목표

 

지난 포스팅에서 Flowable과 Observable을 사용해왔습니다. 이번 포스팅에서는 또 다른 생산자인 Single, Maybe 그리고 Completable을 사용해보며 익숙해지도록 합니다. 또한 어떠한 차이점이 있는지 알아보도록 합니다.

 

 

이 3가지 클래스는 Flowable과 Observable처럼 대량의 데이터를 처리하는 것이 아니라 데이터를 최대 1건만 발행하는 생산자들인데 각각 어떠한 차이점들이 있는지 알아보도록 합니다.

 

 

1. Single

 

  • 데이터를 1건만 통지하거나 에러를 통지합니다.
  • 데이터 통지 자체가 완료를 의미하기 때문에 별도로 완료 통지를 하지 않습니다.
  • 데이터를 1건만 통지하므로 데이터의 개수를 요청할 필요가 없습니다.
  • onNext(), onComplete()가 없으며, 이 둘을 합친 onSuccess()만을 제공합니다.
  • Single의 대표적인 소비자는 Observer 인터페이스를 구현한 SingleObserver입니다.
  • Client의 요청에 대응하는 서버의 응답을 Single로 처리하는 것이 대표적인 예입니다.

 

Single을 Lamda식으로 바꾸어 작성한 코드입니다.
각각 onSuccess()와 onError()가 실행됐을 때의 결과입니다.

 

 

 

2. Maybe

 

  • 데이터를 1건만 통지하거나 1건도 통지하지 않고 완료 또는 에러를 통지합니다.
  • 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않습니다.
  • 데이터를 1건도 통지하지 않고 처리가 종료되면 완료 통지를 합니다.
  • Maybe의 대표적인 소비자는 Observer 인터페이스를 구현한 MaybeObserver입니다.

 

Maybe를 Lambda식으로 바꾸어 작성한 코드입니다.
Maybe의 empty()의 함수를 사용하면 데이터가 1건도 통지되지 않아 onComplete부분이 실행됩니다. emitter에서 onComplete()를 호출할 때와 같은 결과를 내는 것을 확인할 수 있습니다..
각각 onSuccess(), onError(), onComplete()가 실행됐을 때의 결과입니다.
위의 코드와 같이 Maybe.fromSingle() 함수를 이용하여 Single을 Maybe로 변환하여 사용할 수 있습니다.

 

 

 

 

3. Completable

 

  • 데이터 생산자이지만 데이터를 1건도 통지하지 않고 완료 또는 에러를 통지하는 생산자입니다.
  • 데이터를 1건도 통지하지 않는데 왜 이런 클래스가 필요할까요? 데이터 통지의 역할 대신에 Completable 내에서 특정 작업을 수행한 후에, 해당 작업을 끝났음을 통지하는 목적으로 사용됩니다.
  • Completable의 대표적인 소비자는 Observer 인터페이스를 구현한 CompletableObserver 입니다.

 

Completable을 Lambda식으로 바꾸어 작성한 코드입니다.
각각 subscribe()의 인터페이스 내부의 로직에 구현한 로직에 따라 onComplete()와 onError()가 실행됐을 때의 결과입니다.