[swift] RxCocoa를 활용한 경우별 에러 처리 방법

RxCocoa는 RxSwift와 함께 사용되는 라이브러리로, iOS 애플리케이션을 개발할 때 리액티브 프로그래밍을 편리하게 구현할 수 있습니다. 이번 포스트에서는 RxCocoa를 활용하여 다양한 경우에 대한 에러 처리 방법을 알아보겠습니다.

1. 네트워크 에러 처리

네트워크 요청을 보내는 경우, 에러가 발생할 가능성이 있습니다. RxCocoa에서는 rx.response를 사용하여 HTTP 응답을 옵저버블 형태로 받아올 수 있습니다. 이 때 네트워크 에러를 처리하기 위해 catchError 오퍼레이터를 사용할 수 있습니다.

let request = URLRequest(url: url)

URLSession.shared.rx.response(request: request)
    .catchError { error in
        // 네트워크 에러 처리 로직
        return Observable.error(error)
    }
    .subscribe(onNext: { response, data in
        // 성공적인 응답 처리 로직
    }, onError: { error in
        // 에러 처리 로직
    })

위의 예제에서는 catchError 오퍼레이터를 사용하여 네트워크 에러가 발생한 경우 에러 처리 로직을 수행하고, Observable.error를 통해 에러를 다시 방출합니다. 이후에는 에러를 처리하는 onError 블록에서 원하는 에러 처리 로직을 구현할 수 있습니다.

2. 사용자 입력 에러 처리

사용자로부터 입력을 받는 경우에도 에러가 발생할 수 있습니다. 예를 들어, 유효하지 않은 이메일 주소를 입력받았을 경우 등이 있습니다. 이런 경우에는 RxCocoa의 rx.controlEventrx.text를 활용하여 사용자 입력을 옵저버블로 받아올 수 있습니다.

emailTextField.rx.text
    .map { text -> Bool in
        // 이메일 유효성 검사 로직
    }
    .bind(to: submitButton.rx.isEnabled)

위의 예제에서는 emailTextField의 텍스트 입력을 옵저버블로 받아오고, map 오퍼레이터를 이용하여 이메일 유효성을 검사합니다. 이후에는 bind(to:) 메서드를 사용하여 결과값을 submitButtonisEnabled 속성에 바인딩합니다.

이렇게 사용자 입력 에러를 처리할 때에는 사용자에게 에러 메시지를 표시하는 등의 추가적인 작업을 수행할 수 있습니다.

3. API 에러 처리

API 요청을 보낼 때에도 에러가 발생할 수 있습니다. 예를 들어, 유효하지 않은 API 요청이나 인증 오류 등이 있을 수 있습니다. RxCocoa에서는 rx.data(request:)를 사용하여 API 요청 결과를 옵저버블로 받아올 수 있습니다.

let request = URLRequest(url: url)

URLSession.shared.rx.data(request: request)
    .map { data -> ResultType in
        // API 응답 해석 로직
    }
    .catchError { error in
        // API 에러 처리 로직
        return Observable.error(error)
    }
    .subscribe(onNext: { result in
        // API 응답 처리 로직
    }, onError: { error in
        // 에러 처리 로직
    })

위의 예제에서는 catchError 오퍼레이터를 사용하여 API 에러가 발생한 경우 에러 처리 로직을 수행하고, Observable.error를 통해 에러를 다시 방출합니다. 그 후에는 에러를 처리하는 onError 블록에서 원하는 에러 처리 로직을 구현할 수 있습니다.

결론

RxCocoa를 활용하면 다양한 경우에 대한 에러 처리를 더욱 효율적으로 구현할 수 있습니다. 네트워크 에러, 사용자 입력 에러, API 에러 등에 대한 처리 방법을 익혀두면 애플리케이션 개발 과정에서 유용하게 활용할 수 있습니다.

참고 자료