Objective-C (에러 핸들링)

이한솔·2024년 8월 2일

Objective-C 문법 🍎

목록 보기
11/12

에러 핸들링

Objective-C에서 에러가 발생하면 NSError 객체를 사용하거나, NSException과 @try, @catch, @finally 구문을 사용해서 처리할 수 있다.



NSError 객체 사용

NSError는 Objective-C에서 에러를 처리하기 위한 클래스로 에러 정보를 포함하는 여러 속성을 제공한다. 주요 속성은 Domain, Code, User Info가 있다.

  • Domain: 에러의 범위 또는 영역을 나타내는 문자열
  • Code: 도메인 내에서 에러를 구체적으로 식별하는 정수 값, 도메인과 함께 사용되어 에러의 세부 정보를 제공한다.
  • User Info: 에러와 관련된 추가적인 정보를 담고 있는 딕셔너리, nil일 수도 있다.
// NSError ** : 포인터의 포인터, 함수가 새로운 에러 객체를 반환하거나 수정할 수 있도록 사용
- (BOOL)someMethodWithError:(NSError **)error {
    // 에러 발생 시 에러 정보를 error 포인터를 통해 반환
    if (/* some error condition */) {
        if (error) {
            *error = [NSError errorWithDomain:@"com.example.error"
                                         code:100
                                     userInfo:@{NSLocalizedDescriptionKey: @"Something went wrong"}];
        }
        return NO;
    }
    return YES;
}

// NSError * : 단일 에러 객체를 참조하는 포인터 
NSError *error = nil;
BOOL success = [self someMethodWithError:&error];
if (!success) {
    NSLog(@"Error: %@", error.localizedDescription);
}


NSException, @try, @catch 블록 사용

NSException은 주로 프로그램의 비정상적인 상태인 예외 발생 시 @throw키워드로 예외를 던진다. @try 블록에서 예외를 발생시킬 수 있는 코드를 실행하고, @catch 블록에서 예외를 처리할 수 있다. @finally 블록은 예외 발생 여부와 관계없이 항상 실행되고 필수는 아니다.

  • name: 예외의 이름을 나타내는 문자열
  • reason: 예외가 발생한 이유를 설명하는 문자열
  • userInfo: 예외와 관련된 추가 정보를 담고 있는 딕셔너리, nil일 수도 있다.
- (void)someMethod {
    @throw [NSException exceptionWithName:@"CustomException"
                                   reason:@"Something went wrong"
                                   userInfo:nil];
}


@try {
    [self someMethod];
}
@catch (NSException *exception) {
    NSLog(@"Exception: %@", exception.reason);
}
@finally {
    // Clean-up code, if needed
}

0개의 댓글