[TIL] 에러처리

Eden·2025년 6월 5일

throws: 이 함수는 에러를 던질 수 있어요!

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를 사용해 실제로 에러를 던집니다.


try: 이 함수는 실패할 수도 있어요!

do {
    try validate(password: "123")
} catch {
    print("❌ 비밀번호가 유효하지 않습니다: \(error)")
}

try를 통해 에러가 날 수 있다는 걸 인정하고,
do-catch 블록 안에서 호출해 에러를 잡아줍니다.


catch: 에러를 잡아라!

do {
    try validate(password: "123456")
} catch PasswordError.tooShort {
    print("❗ 비밀번호가 너무 짧아요.")
} catch PasswordError.tooObvious {
    print("❗ 너무 뻔한 비밀번호는 안돼요.")
} catch {
    print("❗ 알 수 없는 에러: \(error)")
}

각 에러를 구분해서 다르게 처리할 수 있어요
catch는 위에서 아래로 실행되며, 순서가 중요해요


try?와 try!: 간단하게 써보자

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에러 처리 블록
profile
iOS Dev

0개의 댓글