[swift] 비동기 작업의 에러 처리 방법

비동기 작업을 수행할 때, 에러 처리는 매우 중요합니다. 에러 처리를 올바르게 수행하지 않으면 애플리케이션이 비정상적으로 종료될 수 있습니다. 이번 글에서는 Swift에서 비동기 작업의 에러를 처리하는 방법을 알아보겠습니다.

1. completionHandler를 활용한 에러 처리

가장 기본적인 방법은 completionHandler를 사용하여 에러를 처리하는 것입니다. 아래는 completionHandler를 통해 에러를 처리하는 예제 코드입니다.

func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
    // 비동기 작업 수행
    // 결과를 completionHandler를 통해 전달
    if let data = fetchedData {
        completion(.success(data))
    } else {
        let error = NSError(domain: "com.example", code: 500, userInfo: [NSLocalizedDescriptionKey: "Data not found"])
        completion(.failure(error))
    }
}

// 사용 예
fetchData { result in
    switch result {
    case .success(let data):
        // 데이터 처리
    case .failure(let error):
        // 에러 처리
        print("Error: \(error.localizedDescription)")
    }
}

2. async/await 구문을 활용한 에러 처리

Swift 5.5부터는 async/await 구문을 활용하여 비동기 작업을 더 쉽게 처리할 수 있습니다. 아래는 async/await 구문을 통해 에러를 처리하는 예제 코드입니다.

func fetchData() async throws -> Data {
    // 비동기 작업 수행
    if let data = fetchedData {
        return data
    } else {
        throw MyError.dataNotFound
    }
}

// 사용 예
do {
    let data = try await fetchData()
    // 데이터 처리
} catch {
    // 에러 처리
    print("Error: \(error.localizedDescription)")
}

결론

비동기 작업에서의 에러 처리는 completionHandler와 async/await를 통해 각각 다르게 구현할 수 있습니다. 적합한 방법을 선택하여 안정적인 애플리케이션을 구축하는 데 도움이 될 것입니다.

참고: Swift documentation on async/await