본문 바로가기
1 - iOS

[iOS/Swift] 에러 처리 방법, do-catch 구문, defer 구문 등

by seonshine-bibi 2022. 8. 12.
반응형

 

Error protocol

Swift에서 제공하는 Error protocol은 사실 요구사항이 없는 빈 프로토콜이지만, 오류를 표현하기 위해 enum에 Error를 채택하여 사용한다. 

 

 

do-catch 구문, try 키워드

오류를 처리하기 위한 4가지 방법은, 

1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 알리기

2. do-catch 구문을 이용하여 오류를 처리하기

3. 옵셔널 값으로 오류를 처리하기

4. 오류가 발생하지 않을 것이라고 확신하기

이 있다.

 

 

1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 알리는 방법

try 키워드로 던져진 오류를 받을 수 있다. 함수, 이니셜라이저의 매개변수 뒤에 throws 키워드를 사용하면 오류를 던질 수 있다.

 

2. do-catch 구문을 통하여 오류를 처리하기

오류 발생을 받은 코드는 do-catch 구문을 사용하여 오류를 처리해주어야 한다.

do { try ... } catch { ... } 형식으로 사용할 수 있다.

 

3. 옵셔널 값으로 오류를 처리하기

try? 를 사용하면 함수의 리턴 값을 옵셔널로 반환하여 오류가 있으면 nil, 아니면 optional 한 값이 리턴되도록 하여 오류를 처리할 수 있다. 

 

4. 오류가 발생하지 않을 것이라고 확신하기

try! 는 오류가 발생하지 않을 것이라고 확신할 수 있을 때 사용해야 한다.

실제 오류가 발생하면 런타임 에러가 발생하여 프로그램이 강제 종료된다.

 

 

 

rethrows 키워드

함수나 메소드는 rethrows 키워드를 사용하여 자신의 매개변수로 전달 받은 함수가 오류를 던진다는 것을 나타낼 수 있다.

rethrows 키워드를 사용하여 다시 던지기가 가능하려면, 최소 하나 이상의 오류가 발생 가능한 함수를 매개변수로 전달 받아야 한다.

 

 

defer 구문

defer 구문을 통해 현재 코드 블록을 나가기 전에 꼭 실행해야 하는 코드를 작성할 수 있다. 

코드에서 오류가 발생했든, 정상적으로 종료했든 상관 없이 코드가 블록을 빠져나가기 전에 무조건 실행되는 것을 보장할 수 있다.

 

defer 구문은 오류 처리 상황 뿐만 아니라 함수, 메소드, 반복문, 조건문 등 일반적인 코드 블록 어디서든 사용할 수 있다.

defer { ... } 형식으로 사용한다.

 

여러 개의 defer 구문이 하나의 범위에 포함되어 있을 때에는 하단에 작성된 구문부터 역순으로 실행된다.

 

 

반응형