Swift Error Handling(에러 핸들링) 하는 방법
Swift의 Error Handling(에러 핸들링) 하는 방법을 배워보세요.

Swift에서 Error Handling은 예외 처리를 위한 메커니즘입니다. 예외는 프로그램에서 예상치 못한 상황이 발생했을 때 발생하는 오류를 의미합니다.
1. Swift에서 Error Handling 정의 하는 방법
Swift에서는 에러를 Error 프로토콜을 준수하는 열거형으로 정의합니다. 네트워크 요청 중 발생할 수 있는 다양한 상황을 다음과 같이 표현할 수 있습니다.
enum NetworkError: Error {
case badURL
case requestFailed
case noData
case decodingError
}
각 케이스는 발생할 수 있는 네트워크 관련 에러 상황을 나타냅니다:
- badURL: URL이 잘못되었을 때.
- requestFailed: 네트워크 요청이 실패했을 때.
- noData: 데이터가 반환되지 않았을 때.
- decodingError: 데이터를 디코딩할 수 없을 때.
2. 에러를 발생시키는 함수
throws
키워드를 사용하면 함수에서 에러를 던질 수 있습니다.
func fetchData(from url: String) throws -> Data {
// URL 유효성 검증
guard let validURL = URL(string: url) else {
throw NetworkError.badURL
}
print("URL 요청: \(validURL)")
// 요청 성공 여부를 랜덤으로 시뮬레이션
let success = Bool.random()
if !success {
throw NetworkError.requestFailed
}
// 요청 성공 시 더미 데이터 반환
return Data("서버로부터 받은 데이터".utf8)
}
- URL 유효성 검증: URL(string:)을 통해 URL이 유효하지 않으면 NetworkError.badURL를 던집니다.
- 네트워크 요청 시뮬레이션: Bool.random()으로 요청 성공 여부를 랜덤하게 결정합니다.
- 더미 데이터 반환: 요청이 성공하면 데이터를 반환합니다.
3. 에러 처리: do-catch 구문
에러를 처리하려면 do-catch 블록을 사용해야 합니다. try 키워드를 사용해 에러를 발생시킬 수 있는 함수를 호출하고, 발생한 에러를 catch 블록에서 처리합니다.
do {
let data = try fetchData(from: "https://api.example.com/data")
print("데이터를 성공적으로 가져왔습니다: \(String(data: data, encoding: .utf8) ?? "데이터 변환 실패")")
} catch NetworkError.badURL {
print("잘못된 URL입니다.")
} catch NetworkError.requestFailed {
print("네트워크 요청이 실패했습니다.")
} catch NetworkError.noData {
print("데이터를 받을 수 없습니다.")
} catch NetworkError.decodingError {
print("데이터 디코딩에 실패했습니다.")
} catch {
print("알 수 없는 에러가 발생했습니다: \(error)")
}
4. 옵셔널 try? 와 강제 try!
try?와 try!는 에러 처리의 간소화 및 강제 실행을 위해 제공된니다.
- try? : 에러가 발생하면 nil을 반환하여 에러를 무시할 수 있습니다.
let data = try? fetchData(from: "https://invalidurl.com")
print(data ?? "데이터를 가져올 수 없습니다.")
- try! : 에러가 발생하지 않을 것이라고 확신할 때 사용합니다. 하지만 에러가 발생하면 런타임 크래시가 발생합니다.
let data = try! fetchData(from: "https://api.example.com/data")
print(data)