IOS- 23

김정현·2023년 4월 1일
0

IOS 개발공부 일지

목록 보기
23/27

오류처리

오류처리는 프로그램이 오류를 일으켰을 때 이것을 감지하고 회복시키는 일련의 과정이다.

오류의 표현

오류는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현된다. Error프로토콜은 사실상 요구사항이 없는 빈 프로토콜이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택한다.

enum vendingmachineErroe: Error {
	case A
    case B
    case C
}

오류의 종류를 미리 예상한 다음 오류때문에 다음에 행할 동작이 정상적으로 진행되지 않는다면 오류를 던져준다. (throw구문을 사용)

오류 포착 및 처리

오류가 던져지는 것에 대비하여 던져진 오류를 처리하기위한 코드를 작성해야한다.

함수에서 발생한 오류 알리기

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

func ABC() -> String


func ABC() throws -> String   //throws를 통해 자신을 호출한 코드에게 오류를 던져서 알린다.

try키워드를 통해 던져진 오류를 받을 수 있다. (try?, try!)
자신을 호출한 코드로 던져서 알릴 수는 있지만, 오류를 받은코드가 적절히 오류를 처리해주지 않는다면 이후의 코드는 작동하지 않는다.

do-catch 구문을 통해 오류처리

함수, 메서드, 이니셜라이저 등에서 오류를 던져주면(throws) 오류발생을 전달받은 코드 블록은 do-catch 구문을 통해 오류를 적절히 처리한다.

do {
	try 오류 발생 가능 코드
    오류가 발생하지 않으면 실행할 코드
    } catch 오류 패턴 1 {
    	처리코드
    } catch 오류 패턴 2 where 추가 조건 {
    	처리 코드
    }

옵셔널 값으로 오류처리

try?를 사용하여 옵셔널 값으로 변환하여 오류를 처리할 수도 있다. try? 표현을 통해 동작하던 코드가 오류를 던지면 그 코드의 반환 값은 nil이 된다.
반환 타입은 반드시 옵셔널로 된다.

.
.
let x: Optional = try? someThrowFunction(shouldThrowError: true) 

//nil
.
.

오류가 발생하지 않는다고 확신한다면 오류를 던질 수 있는 함수 등을 호출 할때 try!를 사용할 수 있다.

다시 던지기

rethrows 키워드를 사용하여 다시 던지기가 가능한 데, 이때 최소 하나 이상의 오류 발생 가능한 함수를 매개변수로 전달받아야 한다.
다시 던지기는 오류를 다시 던질 뿐 따로 처리는 하지 않는다.

func ABC() throws {
		enum SomeError: Error {
        	case justsomeError 
        }
        
        throw SomeError.justError
    }
    
    func someFunction(callback: () throws -> Void) rethrows {    //다시 던짐.
    .
    .
    .

후처리 defer

defer 구문을 사용하여 현재 코드 블록을 나가기 전에 꼭 실행해야 하는 코드를 작성해줄 수 있다. 오류처리 상황 뿐아니라 어디서든 사용이 가능하다.

defer { 실행 구문 }

0개의 댓글