기본 (The Basics) - 에러 처리 (Error Handling)

00yhsp·2024년 4월 1일

프로그램이 실행되는 동안 에러가 발생할 때 처리하기 위해 에러 처리(error handling)를 사용한다.

값의 존재 유무를 사용하여 함수의 성공 또는 실패를 전달할 수 있는 옵셔널과 달리 에러 처리를 사용하면 에러 원인을 판별하고 필요한 경우 에러를 프로그램의 다른 부분으로 전파할 수 있다.

함수에 에러 조건이 되면 에러가 발생한다.
해당 함수의 호출자는 에러를 포착하고 적절하게 응답할 수 있다.

func canThrowAnError() throws {
	// this function may or may not throw an error
}

함수는 선언에 throws 키워드를 포함시켜 에러가 발생할 수 있음을 나타낸다.
에러를 발생할 수 있는 함수를 호출할 때는 표현식 앞에 try 키워드를 붙여야 한다.

Swift는 catch절에 의해 처리될 때 까지 현재 범위에서 에러를 자동으로 전파한다.

do {
	try canThrowAnError()
    // no error was thrown
} catch {
	// an error was thrown
}

do 구문은 에러를 하나 이상의 catch 절로 전파할 수 있는 새로운 범위를 만든다.

다음은 에러 처리를 사용하여 다양한 에러 조건에 응답하는 방법의 예이다:

func makeASandwich() throws {
	// ...
}

do {
	try makeASandwich()
    eatSandwich()
} catch SandwichError.outOfCleanDishes {
	washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
	buyGroceries(ingredients)
}

이 예에서 makeASandwich() 함수는 깨끗한 그릇을 사용할 수 없거나 재료가 없는 경우 에러가 발생한다.
makeASandwich() 함수는 에러를 발생시킬 수 있으므로 try 표현식으로 래핑된다.
함수 호출을 do 구문으로 래핑하면 어떠한 에러도 catch 절로 전파된다.

에러가 발생하지 않으면 eatASandwich() 함수가 호출된다.
SandwichError.outOfCleanDishes 에러가 발생하면 washDishes() 함수가 호출된다.
SandwichError.missingIngredients 에러가 발생하면 catch 패턴에 의해 캡쳐된 [String] 값과 함께 buyGroceries(_:) 함수가 호출된다.

profile
iOS Dev

0개의 댓글