enum PasswordError: Error {
case tooShort
case tooObvious
}
func validate(password: String) throws {
if password.count < 6 {
throw PasswordError.tooShort
}
if password == "123456" {
throw PasswordError.tooObvious
}
print("✅ 비밀번호가 유효합니다.")
}
이 함수는 throws를 붙여서 에러를 던질 수 있다고 알려줘요.
그리고 문제가 생기면 throw를 사용해 실제로 에러를 던집니다.
do {
try validate(password: "123")
} catch {
print("❌ 비밀번호가 유효하지 않습니다: \(error)")
}
try를 통해 에러가 날 수 있다는 걸 인정하고,
do-catch 블록 안에서 호출해 에러를 잡아줍니다.
do {
try validate(password: "123456")
} catch PasswordError.tooShort {
print("❗ 비밀번호가 너무 짧아요.")
} catch PasswordError.tooObvious {
print("❗ 너무 뻔한 비밀번호는 안돼요.")
} catch {
print("❗ 알 수 없는 에러: \(error)")
}
각 에러를 구분해서 다르게 처리할 수 있어요
catch는 위에서 아래로 실행되며, 순서가 중요해요
let result = try? validate(password: "123456") // result는 Void? 타입, 에러나면 nil
try? – 에러 나면 그냥 nil 반환
try! validate(password: "superSecret123") // 에러 나면 crash!
try! – 무조건 성공한다고 믿기 😅 (실패하면 앱 죽음)
| 키워드 | 설명 |
|---|---|
throws | 에러 던질 수 있는 함수 정의 |
throw | 실제 에러 던짐 |
try | 에러 날 수 있는 함수 호출 |
try? | 에러 나면 nil 반환 |
try! | 에러 절대 안 난다고 믿음 (비추천) |
do-catch | 에러 처리 블록 |