본문 바로가기

Kotlin/안드로이드 공부

Rxjava 에러 캐치

728x90

Rxjava 에서는 에러 발생시 onError 이벤트가 발생하기 때문에 기존 사용하던 try-catch 문을 사용할 수 없다.

하지만 onError 이벤트는 흐름이 중단된다는 문제점이 있다. 이때 소비자가 모든 예외를 미리 알고 처리하기는 힘드므로 생산자 쪽에서 에러를 캐치해서 사전에 예외처리를 해둘 수 있는 3가지 Operator 를 정리해보려고 한다.

 

*Rxjava 에서는 에러도 어떠한 데이터로 본다.

 

onErrorReturn()

에러 발생 시점에 특정 값으로 대체

+ 선언적으로 예외 발생 처리 가능

 

.onErrorReturn { it:Throwable 
    when (it) {
        is java.lang.NullPointerException -> {
			it.printStackTrace()
        }
    }
}

 

 


 

onErrorReturnItem()

에러 발생 시점에 특정 값으로 대체

onErrorReturn() 과 동일하지만 throwable 객체를 인자로 받아오지 않음

+ 코드의 가독성

- 예외의 종류를 확인할 수 없음

 

 


 

onErrorResumeNext()

에러 발생 시점에 대체할 스트림 (Observable 등) 으로 대체 -> 대체할 데이터가 고정되어 있지 않을 때 사용

이 operator 와 비교해서 onErrorReturn() 과 onErrorReturnItem() 은 기본 값 반환 후 더이상 emit 하지 않는다는 것을 알 수 있다.

+ 에러 처리 외에도 필요한 추가 작업 가능

+ onErrorReturn() 처럼 throwable 받아오기 가능