RxJava Single, Maybe, Completable

HEETAE HEO·2022년 7월 7일
0
post-thumbnail

Single

Single은 Observable의 변형된 형태입니다. Observable과 비슷하지만, 여러 개의 데이터를 발행할 수 있는 Observable과 달리 Single은 한 개의 데이터(혹은 에러)만을 발행합니다.

Observable은 3가지 알림을 보내지만 Single은 onSuccessm onError 2가지의 알림만 보냅니다.

create()를 사용할 때 Emitter를 사용하여 데이터를 발행합니다.

onSuccess : 데이터 하나를 발행함과 동시에 종료
onError : 에러가 발생했음을 알림

응답이 단 하나만 오는 특징을 있어 HTTP 통신이에 자주 사용되는데 Android에서의 HTTP 통신은 대표적으로 Retrofit2가 있습니다.

Retrofit2 빌더에는 RxJava CallAdapter를 추가하는 것을 지원하기 때문에 편리하게 HTTP 요청을 Sigle 스트림으로 만들어 사용할 수 있습니다.

fun main() {
	Single.create<String> { // it: SingleEmiiter<String!>
    	it.onSuccess("HeeTae")
    }.subscribe { it -> 
    	println(it)
        }
    }
결과 : HeeTae

Observable을 Single로 변환할 수도 있습니다.
!!단 여러 데이터를 발행하는 Observable을 Single로 변환하면 컴파일에러가 발생합니다.

// fromObservable() 사용
Observable<Integer> observable = Observable.just(1);
Single.fromObservable(observable)
	.subscribe(System.out::println);
    
// Single()사용
Observable.just(1)
	.single(0) //default value
    .subscribe(System.out.println);

Maybe

Maybe도 Observable의 또 다른 형태입니다. Maybe는 최대 데이터 하나를 발행할 수 있으며 추가로 데이터 없이도 완료할 수 있습니다. 즉 데이터를 발행할 수도 할 수도있는 스트림입니다.

총 3가지의 알림을 보내는데

  • onSuccess : 데이터 하나를 발행함과 동시에 종료
  • onError : 에러가 발생했음을 알림
  • onComplete : 데이터 발행이 완료됐음을 알림

fun main() {
	Maybe.create<String> { //it : MaybeEmitter<String!>
    	it.onSucess("HeeTae")
        }.subscribe {
        	println(it)
       }
  }
결과 : HeeTae

Completable

데이터를 발행하는 Observable,Single,Maybe와 달리 데이터 발행의 완료/에러 신호만 보내는 특수한 형태입니다. 따라서 데이터 발행의 완료를 알리는 onComplete와 에러 발생을 알리는 onError 2가지 알림을 보냅니다.

  • onComplete : 데이터 발행이 완료됐음을 알림
  • onError : 에러가 발생했음을 알림

fun main() {
	completable.create { //it : CompletableEmiiter
    println("HeeTae vlog")
    it.onComplete()
}.subscribe {
	println("Completable")
    }
}
profile
Android 개발 잘하고 싶어요!!!

0개의 댓글