RxJava에서는 Flowable, Observable외에 Single, Maybe, Completable이 있습니다. 이번 글에서는 Single, Maybe, Completable이 어떤 것인지 알아보겠습니다.
전달해야 하는 데이터가 1개 일 때 사용하는 생산자입니다. 데이터를 1건만 전달하거나 에러를 전달하는 생산자로 완료에 대한 전달은 없습니다.
Single이 생산하는 데이터를 전달 받기 위해서는 SingleObserver를 사용해야 합니다.
SingleObserver (RxJava Javadoc 2.2.17)
공식 문서에서는
Provides a mechanism for receiving push-based notification of a single value or an error. (단일 값 또는 오류에 대한 푸시 기반 알림을 수신하기 위한 메커니즘을 제공합니다.)
라고 소개 하고 있습니다.
fun main() {
val single = Single.just("Hello World")
single.subscribe(object : SingleObserver<String> {
override fun onSuccess(t: String) {
// 1개 전달(성공)
println("onSuccess")
println(t)
}
override fun onSubscribe(d: Disposable) {
// 구독
println("onSubscribe")
}
override fun onError(e: Throwable) {
// 실패
println("onError")
e.printStackTrace()
}
})
}
결과화면
SingleObserver를 직접 만들어서 subscribe 할 필요 없이 Single은 다양한 subscribe 함수들을 제공합니다. 이 함수들은 Disposable을 리턴합니다.
Single (RxJava Javadoc 2.2.17)
fun main() {
Single.just("Hello World")
.subscribe { item -> println(item) } // onSuccess 만 처리
}
fun main() {
Single.just("Hello World")
.subscribe { item, error ->
item?.let { println(it) } // onSuccess 처리
error?.let { it.printStackTrace() } // onError 처리
}
}