Objective-C 예외 처리 정리

Swift // 2024년 08월 06일 작성

Objective-C에서도 예외(exceptions) 처리가 가능함을 이제서야 알게 되었다. 간단하게 정리해 보자.

Objective-C 예외 처리 기본

Objective-C에서 예외 처리 루틴은 아래와 같은 문법으로 작성할 수 있다.

@try {
    // 예외 발생을 감시할 코드들
}
@catch (SomeAnotherException *e) {
    // 특정 예외 감시 가능
}
@catch (NSException *e) {
    // 대부분의 예외가 발생할 경우 호출
}
@finally {
    // 예외 발생 여부와 상관 없이 try 블럭이 끝나면 이 곳이 호출
    // 메모리 해제 루틴을 넣기에 좋은 위치
}

현대적인 언어에서 자주 볼 수 있는 예외 처리 방식이라 굳이 상세히 설명할 필요는 없을 것 같다.

예외 발생시키기

예외를 발생시킬 때는 @throw를 이용할 수 있다.

@throw [NSException exceptionName:@"MyException" 
                           reason:@"I have no money" 
                         userInfo:nil];

예외 토스하기

예외가 발생하면 이를 더 상위로 던져줘서 거기서 알아서 처리하라고 하고 싶을 때가 있는데 이럴 때는 그냥 @throw를 쓰기만 해도 된다.

@catch (NSException *e) {
    @throw;
}

이렇게 하면 굳이 예외 인스턴스를 적어주지 않아도 알아서 동일한 예외가 발생되므로 상위 레벨에서 예외를 잡을 수 있다.