Throw, Try, Do-Catch
- 함수에서 발생할 수 있는 에러를 식별, 처리하는 과정을 관리
Throw
- 함수 내에서 특정 조건에 따라 에러를 발생시키기 위해 사용한다.
- 발생될 에러의 종류를
enum
과 Error
프로토콜을 활용하여 먼저 정의한다.
enum MyError: Error {
case firstError
case secondError
}
- 함수가 에러를 던질 수 있다는 것을
throws
를 통해 명시한다.
- 함수 내부에서 특정 조건에서
throw
를 통해 에러를 던질 수 있다.
func someFunction() throws -> String {
if isSuccess {
return "Success!"
} else {
throw MyError.firstError
}
}
throw
를 통해 에러를 던지는 함수는 반드시 try
를 통해 호출해야 한다.
Try, Do-Catch
throws
함수는 반드시 try
를 통해 호출하고 throw
로 던지는 에러에 대한 처리를 해야한다.
- 에러에 대한 처리는
do-catch
문을 통해 catch
블럭에서 해야한다.
do {
let result = try someFunction()
} catch MyError.firstError {
} catch {
}
- 에러의 종류에 따라
switch
문을 통해 케이스별로 처리할 수 있다.
do {
let result = try someFunction()
} catch {
switch error {
case MyError.firstError:
print("first")
case MyError.secondError:
print("second")
default:
print("default")
}
}
try?
는 에러를 던지는 함수의 결과를 옵셔널로 감싸, 에러를 발생할 경우 nil
로 반환한다.
- 때문에
do-catch
문 없이도 사용할 수 있다.
let result = try? someFunction()
try!
는 함수가 에러를 던지지 않을 것이라는 확신이 있을 때 사용하며, 만약 함수가 에러를 던지면 런타임 에러가 발생하고 프로그램이 종료되기 때문에 주의해야 한다.
let result = try! someFunction()
감사합니다. 이런 정보를 나눠주셔서 좋아요.