[swift] 서브클래스를 사용한 커스텀 에러 정의 방법

앱을 개발하다 보면 기존의 에러 유형으로는 표현할 수 없는 특정한 상황에 대한 에러를 정의해야 할 때가 있습니다. Swift에서는 이러한 경우에 커스텀 에러를 정의하고 사용할 수 있습니다. 이때, 서브클래스를 이용해 기존의 Error 타입을 상속받아 새로운 에러 타입을 만들 수 있습니다.

1. 서브클래스를 이용한 커스텀 에러 타입 정의하기

서브클래스를 사용하여 커스텀 에러를 정의하는 방법은 다음과 같습니다.

enum CustomError: Error {
    case invalidInput
    case networkError
    case serverError(description: String)
}

위 예시에서 CustomErrorError 프로토콜을 준수하는 열거형입니다. invalidInput, networkError, serverError는 각각 다른 종류의 커스텀 에러 케이스를 정의합니다. serverError의 경우 추가적으로 에러 메시지를 받을 수 있도록 하였습니다.

2. 커스텀 에러 사용하기

이제 이러한 커스텀 에러를 사용하는 방법에 대해 알아보겠습니다.

func fetchData() throws {
    // ...
    throw CustomError.networkError
    // ...
}

위와 같이 throw 구문을 이용하여 커스텀 에러를 던질 수 있습니다.

do {
    try fetchData()
} catch CustomError.networkError {
    print("네트워크 에러가 발생했습니다")
} catch CustomError.serverError(let description) {
    print("서버 에러: \(description)")
} catch {
    print("다른 에러가 발생했습니다")
}

catch 구문을 사용하여 특정 커스텀 에러 케이스를 처리할 수 있습니다. 만약 특정한 에러 케이스에 해당되지 않는다면 catch 구문은 마지막의 catch 블록으로 넘어갑니다.

이와 같이 Swift에서는 서브클래스를 이용하여 커스텀 에러를 정의하고 활용할 수 있습니다.

참고 자료