Swift의 enum vs Kotlin의 sealed class: 프로토콜과 함께 이해하기

Swift에서는 enum을 이용해 오류 처리를 할 수 있으며, 이는 Kotlin의 sealed class와 유사한 기능을 합니다.

Swift에서의 enum 활용

enum FetchError: Error {
    case badRequest
    case badJSON
}

Swift에서 Error 프로토콜을 채택하면 throw FetchError.badRequest 같은 방식으로 예외를 던질 수 있습니다.

Kotlin에서의 sealed class

sealed class FetchError : Throwable() {
    object BadRequest : FetchError()
    object BadJSON : FetchError()
}

Swift에서는 sealed class 없이도 enum만으로 동일한 기능을 구현할 수 있습니다.

프로토콜과 함께 사용하기

Swift의 enum은 확장이 불가능하지만, 프로토콜을 활용하면 유연한 디자인이 가능합니다.

protocol CustomError: Error {
    var message: String { get }
}

enum FetchError: CustomError {
    case badRequest
    case badJSON
    
    var message: String {
        switch self {
        case .badRequest: return "잘못된 요청입니다."
        case .badJSON: return "JSON 디코딩 실패."
        }
    }
}

이렇게 하면 에러 메시지를 커스텀하여 사용할 수 있습니다.

위로 스크롤