🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다.
이전 포스팅 [Observable 생성하기] 과 이어집니다.
이번 포스팅에서는 Observable 외에, Observable 에서 조금 변형되어 특수 목적을 가지는 데이터 스트림들을 소개한다. 그 중 Single
, Maybe
, Completable
등을 알아보자.
이름에 알 수 있듯, 단 하나의 데이터만 발행하는 녀석이다. 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
Single
와 비슷하지만, 이름에서 유추할 수 있듯 데이터를 발행할 수도 있고 안 할 수도 있는 스트림이다. 따라서 데이터 발행을 할 때는 onSuccess()
, 그렇지 않을 때에는 onComplete()
만 호출한다.
onSuccess()
이후에 onComplete()
를 굳이 호출할 필요는 없다.
fun main() {
Maybe.create<String> { // it: MaybeEmitter<String!>
it.onSuccess("H43RO Velog")
}.subscribe {
println(it)
}
}
H43RO Velog
데이터를 발행하지 않고, 정상적으로 실행이 종료되었는지 확인할 때 사용한다. 데이터를 발행하지 않기 때문에 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()