[Swift] 에러 처리 (Error Handling)

Soomin Kim·2025년 3월 18일

Swift

목록 보기
10/12
post-thumbnail

옵셔널과 에러처리의 다른 점은?

옵셔널 Optional

: 값의 존재 유무를 사용하여 함수의 성공 또는 실패를 전달
: nil을 반환하여 에러를 표현하므로 실패 원인을 알기 어려움
: 간단한 실패를 표현할 때 사용

func findFile(named filename: String) -> String? {
    let files = ["data.txt", "image.png"]
    return files.contains(filename) ? filename : nil  // 파일이 있으면 반환, 없으면 nil
}

if let file = findFile(named: "data.txt") {
    print("파일 찾음: \(file)")
} else {
    print("파일을 찾을 수 없음.")
}

에러처리 Error Handling

: 에러 원인을 판별 가능
: 다른 프로그램의 부분으로 전달도 가능
: throws 키워드를 사용해 함수가 에러를 발생시킬 수 있음을 나타냄
: do-try-catch 구문을 사용해 에러 발생 시 적절한 조치를 취할 수 있음

✅ throws와 do-try-catch의 동작 방식

1️⃣ throws

func canThrowAnError() throws {
    // // 에러 발생 가능
}
  • throws : 에러가 발생할 수 있음을 나타냄, 에러 조건이 되면 에러 발생

2️⃣ do-try-catch

do {
    try canThrowAnError()
    // 에러가 발생하지 않으면 정상 실행
} catch {
    // 에러가 발생하면 여기로 옴
}
  • do 구문 : 에러를 하나 이상의 catch 절로 전파할 수 있는 새로운 범위를 만듬
  • try : 함수를 호출할 때 표현식 앞에 붙이기
  • catch : 처리될 때까지 현재 범위에서 에러를 자동으로 전파
func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich() //에러가 없으면 실행
} catch SandwichError.outOfCleanDishes {
    washDishes() // 깨끗한 그릇이 없으면 설거지 실행
} catch SandwichError.missingIngredients(let ingredients) {
    buyGroceries(ingredients) // 재료가 없으면 장보기 실행
}

makeASandwich()
: 깨끗한 그릇울 사용할 수 없거나 재료가 없는 경우 에러 발생

try makeASandwich()
: 에러 발생 가능성이 있다는 것을 보여줌

catch SandwichError.outOfCleanDishes { washDishes() }
: 깨끗한 그릇을 사용할 수 없을 때 -> washDishes 함수 실행

catch SandwichError.missingIngredients(let ingredients) { buyGroceries(ingredients) }
: 재료가 없는 경우 -> buyGroceries(ingredients) 함수 실행

0개의 댓글