Combine 프레임워크는 Swift 언어와 iOS 앱 개발을 위한 리액티브 프로그래밍을 지원하는 강력한 도구입니다. Combine은 비동기적인 작업을 다룰 때 유용하며, 에러 처리 또한 중요한 부분입니다. 이번 포스트에서는 Combine 프레임워크에서의 에러 처리에 대해 살펴보겠습니다.
Combine에서의 에러 처리
Combine을 사용할 때 발생할 수 있는 에러는 두 가지 종류로 나뉩니다.
- Publisher가 에러를 내보내어 스트림이 종료되는 경우
- Operator가 에러를 내보내는 경우
Publisher에서의 에러 처리
Publisher는 데이터 스트림을 생성하고 에러를 내보낼 수 있습니다. 에러가 발생하면 해당 이벤트를 처리해야 합니다.
예를 들어, 네트워크 요청을 하는 경우 다음과 같이 에러를 처리할 수 있습니다.
import Combine
enum NetworkError: Error {
case invalidResponse
case requestFailed
}
func fetchData(url: URL) -> AnyPublisher<Data, Error> {
return URLSession.shared.dataTaskPublisher(for: url)
.tryMap { data, response in
guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
throw NetworkError.invalidResponse
}
return data
}
.mapError { error in
NetworkError.requestFailed
}
.eraseToAnyPublisher()
}
위 코드에서 tryMap
을 사용하여 유효한 응답이 없는 경우 invalidResponse
에러를 throw하고, mapError
를 사용하여 네트워크 요청에 실패한 경우 requestFailed
에러로 변경합니다.
Operator에서의 에러 처리
Operator는 데이터 스트림을 변환하거나 조작할 때 사용됩니다. Operator에서 발생하는 에러는 map
, flatMap
, filter
등의 메서드를 이용하여 처리할 수 있습니다.
예를 들어, 서버에서 받아온 데이터를 파싱하는 경우 다음과 같이 에러를 처리할 수 있습니다.
import Combine
enum ParsingError: Error {
case invalidData
}
let responsePublisher = fetchData(url: someURL)
.flatMap { data in
Just(data)
.tryMap { data in
try parseData(data)
}
.mapError { _ in
ParsingError.invalidData
}
}
위 코드에서는 flatMap
을 사용하여 데이터를 받아와 파싱하고, tryMap
을 통해 데이터 파싱 시도를 합니다. 그리고 mapError
를 통해 발생할 수 있는 파싱 에러를 invalidData
로 변경합니다.
이처럼 Combine 프레임워크에서는 Publisher와 Operator에서 발생하는 에러를 효과적으로 처리할 수 있습니다.
에러를 다루는 것은 앱의 안정성을 높이는데 중요한 부분이므로, Combine 프레임워크에서의 에러 처리에 익숙해지는 것이 좋습니다.
참고문헌:
이상으로 Combine 프레임워크에서의 에러 처리에 대해 알아보았습니다.