[java] RxJava의 에러 핸들링

RxJava는 자바에서 비동기 및 이벤트 기반 프로그래밍을 수행하기 위한 라이브러리입니다. 그러나 리액티브 스트림에서 에러를 처리해야 하는 경우가 발생할 수 있습니다. 이 문서에서는 RxJava에서의 에러 핸들링에 대해 알아보겠습니다.

에러 핸들링 방법

  1. onErrorResumeNext : 에러 발생 시 다른 Observable로 대체합니다.
    Observable.just(1, 2, 3)
        .map(number -> {
            if(number == 2) {
                throw new RuntimeException("Error Occurred");
            }
            return number;
        })
        .onErrorResumeNext(Observable.just(4, 5, 6))
        .subscribe(number -> System.out.println(number),
                   error -> System.out.println("Error: " + error));
    
  2. onErrorReturn : 에러 발생 시 기본값을 반환합니다.
    Observable.just(1, 2, 3)
        .map(number -> {
            if(number == 2) {
                throw new RuntimeException("Error Occurred");
            }
            return number;
        })
        .onErrorReturn(error -> 999)
        .subscribe(number -> System.out.println(number),
                   error -> System.out.println("Error: " + error));
    
  3. onError : 에러 이벤트를 처리하고 그 다음 작업을 수행합니다.
    Observable.just(1, 2, 3)
        .map(number -> {
            if(number == 2) {
                throw new RuntimeException("Error Occurred");
            }
            return number;
        })
        .doOnError(error -> System.out.println("Error: " + error))
        .subscribe(number -> System.out.println(number),
                   error -> System.out.println("Error: " + error));
    

예외 전파

때로는 에러를 그대로 전파하여 외부에서 처리해야 하는 경우가 있습니다. 이를 위해서는 onError를 사용하면 됩니다.

Observable.just(1, 2, 3)
    .map(number -> {
        if(number == 2) {
            throw new RuntimeException("Error Occurred");
        }
        return number;
    })
    .subscribe(number -> System.out.println(number),
               error -> {
                   System.out.println("Error: " + error);
                   throw new RuntimeException(error);
               });

결론

RxJava에서의 에러 핸들링은 다양한 방법으로 수행할 수 있습니다. onErrorResumeNext, onErrorReturn, onError 메소드를 이용하여 에러를 처리하거나 전파할 수 있습니다. 올바른 에러 핸들링은 애플리케이션의 안정성과 사용자 경험에 중요한 역할을 합니다. ```

참고 자료