[RxJava] Single, Maybe, Completable

H43RO·2021년 8월 25일
2

Reactive Programming

목록 보기
4/16
post-thumbnail

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다.
이전 포스팅 [Observable 생성하기] 과 이어집니다.

이번 포스팅에서는 Observable 외에, Observable 에서 조금 변형되어 특수 목적을 가지는 데이터 스트림들을 소개한다. 그 중 Single, Maybe, Completable 등을 알아보자.

Single

이름에 알 수 있듯, 단 하나의 데이터만 발행하는 녀석이다. create() 를 사용할 때 Emitter 를 사용하여 데이터를 발행한다.

기존에 onNext(), onComplete() 를 사용하여 다양한 이벤트들을 처리해주곤 했는데, Single 은 어차피 단 하나의 데이터 발행만 이루어지기 때문에 onSuccess() 라는 이벤트만으로 데이터 발행이 완료됨을 알린다.

(물론 오류 처리의 경우 동일하게 onError() 를 사용한다)

보통 API 호출 등의 동작에 있어, 어차피 응답은 단 하나만 오므로 HTTP 통신 시에 Single 스트림을 자주 사용하곤 한다.

안드로이드 앱 같은 경우, HTTP 통신에 있어 Retrofit2 라는 라이브러리를 주로 사용할텐데, Retrofit2 빌더에 RxJava CallAdapter 를 추가하는 것을 지원하기 때문에 편리하게 HTTP 요청을 Single 스트림으로 만들어 사용할 수 있다.

fun main() {
    Single.create<String> {  // it: SingleEmitter<String!>
        it.onSuccess("H43RO Velog")
    }.subscribe { it ->
        println(it)
    }
}
H43RO Velog

Maybe

Single 와 비슷하지만, 이름에서 유추할 수 있듯 데이터를 발행할 수도 있고 안 할 수도 있는 스트림이다. 따라서 데이터 발행을 할 때는 onSuccess(), 그렇지 않을 때에는 onComplete() 만 호출한다.

onSuccess() 이후에 onComplete() 를 굳이 호출할 필요는 없다.

fun main() {
    Maybe.create<String> {  // it: MaybeEmitter<String!>
        it.onSuccess("H43RO Velog")
    }.subscribe {
        println(it)
    }
}
H43RO Velog

Completable

데이터를 발행하지 않고, 정상적으로 실행이 종료되었는지 확인할 때 사용한다. 데이터를 발행하지 않기 때문에 onNext(), onSuccess() 은 사용하지 않고 onComplete()onError() 만 사용하게 된다.

fun main() {
    Completable.create {  // it: CompletableEmitter
        println("Completable Start")
        it.onComplete()
    }.subscribe {
        println("Completable Complete")
    }
}

요약

  • Single : 데이터 단 하나만 발행
    • onSucess()
    • onError()
  • Maybe : 데이터 단 하나를 발행할 수도 있고 안 할 수도 있음
    • onSucess()
    • onComplete()
    • onError()
  • Completable : 동작 정상 실행 확인
    • onComplete()
    • onError()
profile
어려울수록 기본에 미치고 열광하라

0개의 댓글