728x90
728x90
Swift 예외 처리: do-catch 문, throw, rethrows 자세히 알아보기
Swift에서 예외 처리(Error Handling)는 프로그램의 안정성을 높이고 예상치 못한 상황에 대한 대처 능력을 향상시키는 데 필수적인 요소입니다. do-catch 문, throw, rethrows 키워드는 이러한 예외 처리를 구현하는 데 사용되는 주요 도구입니다.
1. throw 키워드: 오류 던지기
- 함수에서 오류 발생 시키기: 특정 조건에서 오류가 발생하면 throw 키워드를 사용하여 오류를 던질 수 있습니다. 던지는 오류는 Error 프로토콜을 준수하는 타입이어야 합니다.
- 함수 선언: 오류를 던질 수 있는 함수는 throws 키워드를 함수 선언에 추가하여 명시해야 합니다.
enum DivisionError: Error {
case dividedByZero
}
func divide(_ a: Int, by b: Int) throws -> Int {
guard b != 0 else {
throw DivisionError.dividedByZero
}
return a / b
}
2. do-catch 문: 오류 처리
- 오류 포착: do-catch 문을 사용하여 throw로 던져진 오류를 포착하고 처리할 수 있습니다.
- 구조:
do { // 오류가 발생할 수 있는 코드 } catch 오류타입 { // 오류 발생 시 실행될 코드 }
do {
let result = try divide(10, by: 0)
print(result)
} catch DivisionError.dividedByZero {
print("0으로 나눌 수 없습니다.")
} catch {
print("알 수 없는 오류 발생")
}
3. rethrows 키워드: 오류 재전달
- 함수 내부에서 발생한 오류 전달: 다른 함수를 호출하는 함수에서 그 함수가 throws를 선언했을 경우, 호출한 함수에서도 throws를 선언하고 rethrows 키워드를 사용하여 오류를 재전달할 수 있습니다.
- 오류 처리 위임: 내부 함수에서 발생한 오류를 외부로 전달하여 상위 함수에서 처리하도록 합니다.
func processData(_ data: Data) throws -> String {
guard let jsonString = String(data: data, encoding: .utf8) else {
throw NSError(domain: "DataError", code: -1, userInfo: nil)
}
// JSON 파싱 로직 (오류 발생 가능)
let jsonData = try JSONSerialization.jsonObject(with: data) as? [String: Any]
guard let result = jsonData?["result"] as? String else {
throw NSError(domain: "JSONError", code: -2, userInfo: nil)
}
return result
}
예외 처리 시 고려 사항
- Custom Error: 프로젝트에 맞는 커스텀 에러 타입을 정의하여 더욱 명확한 오류 처리를 할 수 있습니다.
- defer 키워드: do-catch 블록에서 오류 발생 여부와 상관없이 항상 실행해야 하는 코드를 defer 블록에 작성할 수 있습니다. 예를 들어, 파일 닫기, 리소스 해제 등을 수행하는 코드를 작성할 수 있습니다.
- Optional Binding: 옵셔널 값을 언래핑할 때 if let 또는 guard let을 사용하여 nil 값에 대한 처리를 할 수 있습니다.
- Error Propagation: 오류를 최상위 레벨까지 전파하여 프로그램이 비정상적으로 종료되는 것을 방지합니다.
결론
Swift의 예외 처리는 do-catch, throw, rethrows 키워드를 통해 안전하고 강력하게 구현할 수 있습니다. 이를 통해 프로그램의 안정성을 높이고 예상치 못한 상황에 대한 대처 능력을 향상시킬 수 있습니다.
주의:
- 과도한 예외 처리: 모든 상황에서 예외 처리를 사용하는 것은 오히려 코드를 복잡하게 만들 수 있습니다. 필요한 경우에만 예외 처리를 사용해야 합니다.
- 명확한 오류 메시지: 사용자에게 유용한 정보를 제공하기 위해 명확하고 자세한 오류 메시지를 작성해야 합니다.
728x90
728x90
'IOS개발: SWIFT > 5. 고급 주제 탐구' 카테고리의 다른 글
Swift 옵셔널 체이닝, nil 병합 연산자, 옵셔널 패턴 매칭 (0) | 2024.09.13 |
---|---|
Swift CustomError 프로토콜 (0) | 2024.09.13 |
Swift 제네릭 제약 (0) | 2024.09.13 |
Swift 제네릭 함수, 제네릭 타입 (0) | 2024.09.13 |
Swift 열거형과 switch 문 (0) | 2024.09.13 |