[swift] 에러 핸들링을 위한 기본 라이브러리 함수 사용 방법
Swift에서 에러를 처리하는 것은 안전성을 유지하는데 매우 중요합니다. 이 글에서는 Swift의 기본 라이브러리 함수를 사용하여 에러를 처리하는 방법에 대해 알아보겠습니다.
1. 기본적인 에러 핸들링
Swift에서 기본적인 에러 핸들링은 do-catch
구문을 사용합니다.
func divide(_ a: Int, by b: Int) throws -> Int {
guard b != 0 else {
throw DivisionError.divideByZero
}
return a / b
}
do {
let result = try divide(10, by: 2)
print(result)
} catch {
print("에러 발생: \(error)")
}
위의 예제에서 divide
함수는 두 개의 정수를 나누며, 두 번째 매개변수가 0인 경우 DivisionError.divideByZero
에러를 던집니다. 함수를 호출할 때는 try
키워드를 사용하여 에러가 발생할 수 있음을 명시해주어야 합니다.
2. 에러 타입 정의
에러를 처리할 때는 사용자 정의 에러 타입을 정의하는 것이 좋습니다.
enum FileError: Error {
case notFound
case permissionDenied
}
func readFile(atPath path: String) throws {
if !FileManager.default.fileExists(atPath: path) {
throw FileError.notFound
}
else if !FileManager.default.isReadableFile(atPath: path) {
throw FileError.permissionDenied
}
// 파일 읽는 로직
}
do {
try readFile(atPath: "/path/to/file.txt")
} catch {
print("에러 발생: \(error)")
}
위의 예제에서 FileError
는 파일 관련 에러를 다루기 위한 사용자 정의 에러 타입입니다.
3. 옵셔널 값을 다루는 함수
기본 라이브러리에서 제공하는 함수들은 옵셔널 값을 다루는 데 유용합니다.
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
guard let number = convertedNumber else {
print("변환에 실패했습니다.")
return
}
// number를 활용한 로직
Int
의 이니셜라이저는 문자열을 숫자로 변환해줍니다. 그 결과가 옵셔널인 이유는 변환이 실패할 수도 있기 때문입니다.
Swift의 기본 라이브러리 함수를 적절히 활용하면 안전하고 효율적인 에러 핸들링을 구현할 수 있습니다.
이상으로 Swift 에러 핸들링에 대한 기본 라이브러리 함수의 사용 방법에 대해 알아보았습니다. 부가적인 내용들은 Swift 공식 문서에서 확인할 수 있습니다.
## BONUS
에러 핸들링에 있어서 `defer` 키워드를 사용하여 정리 코드를 작성하는 것도 유용할 수 있습니다.
```swift
func processFile(filename: String) throws {
let file = open(filename)
defer {
close(file)
}
// 파일 처리 로직
}