-
Single, Maybe, Completable개발/안드로이드 2021. 7. 4. 17:59
RxJava2 들어오면서 Single, Maybe, Completable Observable이 추가됐다. 개발 할 때는 Single만 사용했었는데 이번 포스트에서 자주 쓰지 않은 Maybe, Completable에 대해서 배워보고 앞으로 용도에 맞춰서 사용해보려고 한다.
Single
단일의 데이터 보내거나 에러를 내는 Observable이다. 주로 서버로부터 http 데이터를 받아올 때 사용한다. 아래 처럼 단일 데이터 객체인 Post를 받아오는 api를 사용한다면 Single로 Observable을 받고 doOnSuccess에서 받아온 데이터를 열어 볼 수 있다. 에러인 경우에는 doOnError를 실행한다
interface RxApi { @GET("api/v1/post") fun getPost(@Query("postId") postId: Long): Single<Post> } apiClient.getPost(postId) .doOnSuccess { post -> Log.d("rxtest", "post: ${post.postId}") } .doonError { } .subscribe()
Maybe
Single처럼 단일의 데이터를 보내는데 빈 값을 보낼 수 있다는 점이 다르다. 서버에서 데이터를 읽는데 너무 오랜 시간이 걸리는 경우나 종종 빈 값을 내려줘야 하는 경우 요긴하게 쓸 수 있다. 빈 값이 내려오는 경우에는 doOnError 가 호출된다.
Maybe.empty<Int>() .doOnSuccess { Log.d("rxjava test", "printed: $it") } .doOnError { throwable -> Log.d("rxjava test", throwable.localizedMessage?: "") } .subscribe()
Completable
함수의 리턴 값은 관심 없고 완료의 유무만 확인하고 싶을 때 사용하는 Observable이다. 서버에 객체를 업데이트하는 요청을 보낸 경우나 로깅용도로 사용하는 경우가 이런 경우에 적합하다.
interface RxApi { @POST("api/v1/log") fun logEvent(@Body param: String): Completable } apiClient.logEvent("this is blog post") .doOnComplete { Log.d("rxjava test", "finished time: ${System.currentTimeMillis()}") } .subscribe()
'개발 > 안드로이드' 카테고리의 다른 글
Coroutine + Retrofit | Coroutine + Room (0) 2021.07.22 suspend fun (0) 2021.07.22 Serializable 과 Parcelable (0) 2021.06.19 kotlin lateinit, lazy by (0) 2021.06.05 Kotlin - Coroutine (0) 2021.05.21