예외처리
- 예외처리를 통해 개발자가 예상하지 못한 에러들을 예외처리하기 위함이다.
- if 문을 통해서도 할 수 있지만, 가독성 + 정확하게 처리를 하기 위함이라고 생각하면 된다.
Throws , do-Catch
Throws
와 do-catch
는 항상 한쌍으로 존재한다.
- Throws
는 리턴값을 반환하기 전에 오류가 발생하면 에러 객체를 반환하다는 의미로 사용한다.
- Throws
는 오류가 발생할 가능성이 있는 메서드 제목 옆에 사용한다.
- Throw
는 오류가 발생할 구간에서 사용한다.
do-catch
는 오류를 handle 하기 위한 용도이다
- 예시코드:
enum CustomError: Error{
case outOfBounds
case invalidInput(String)
}
func processValue(_ value : Int) throws -> Int {
if value < 0 {
throw CustomError.invalidInput("0보다 큰 숫자를 입력하세요")
}
if value > 100 {
throw CustomError.outOfBounds()
}
return value * 2
}
do {
let result = try processValue(-10)
print("result : \(result)")
}catch CustomError.outOfBounds{
print("100보다 작은 숫자만 사용가능")
}catch CustomError.invalidInput(let errorMessage){
print(errorMessage)
}catch {
print("An error occured : \(error)")
}
try, try!, try?
종류 | 사용 방법 | 반환 값 |
---|
try | do-catch와 함꼐 사용 | 리턴값 혹은 에러값 |
try? | let temp = try? someThrowingFunction() | 옵셔널 리턴값 혹은 nil |
try! | let temp = try? someThrowingFunction() | 리턴값 혹은 프로그램 종료 |