Swift5.0 향후 변경 될 수 있는 Enum(열거형) switch @unknown 속성 처리 SE-0192

안녕하세요~! 오늘은 Enum에 대해서 이야기 해보려고 하는데요.
이번 Swift5.0에서 추가된 @unknown 속성에 대해서 이야기 해보려고 합니다.
어떤 역할을 하는지 같이 보시죠~!

보통 Enum값 분기처리시 Switch문을 많이 사용하는데요.
enum에 있는 모든 case들을 무조건 처리 해야합니다.
@unknown 속성을 사용해서 미묘하게 다른 두 가지 방법을 구분할 수 있는데요 아래 예시를 보겠습니다.

패스워드 입력시 발생 할 수 있는 에러를 간략하게 enum으로 표현했습니다

enum PasswordError: Error {
    case short
    case obvious
    case simple
}


에러 처리를 하는 모습을 볼 수 있습니다.

func showPasswordError(_ error: PasswordError) {
    switch error {
    case .short:
        print("Your password was too short.")
    case .obvious:
        print("Your password was too obvious.")
    default:
        print("Your password was too simple.")
    }
}


그런데 만약 에러 케이스가 미래에 추가될 것으로 예상이 된다면
미리 준비할 수 있도록 @unknown default 를 추가할 것을 권장하고 있습니다.

default와 @unknown default의 차이
일반적으로는 default와 동일하게 작동합니다.
가장 큰 차이점은 알려진 모든 요소들이 일치되지 않는 경우에 컴파일러가 경고할 것 이라는 점입니다.
@unknown default는 아직 알려지지 않은 케이스들에 대한 대비이기 때문에
이를 제외한 모든 경우들이 언급되어 있어야 합니다.
만약 그렇지 않은 경우, 모든 경우를 대비하라는 경고("Switch must be exhaustive")가 뜨는 것을 확인할 수 있습니다.
default는 언급되지 않은 모든 경우들에 대한 케이스이므로 대응 하지 않은 케이스가 있어도 경고가 뜨지 않습니다.

func showPasswordError(_ error: PasswordError) {
    switch error {
    case .short:
        print("Your password was too short.")
    case .obvious:
        print("Your password was too obvious.")
    @unknown default:
        print("Your password wasn't suitable.")
    }
}


결국 개발자의 실수를 컴파일러 측면에서 알려줄 수 있는, 미래에 케이스가 추가 될 수 있는 부분들을 명시적으로 알려줌으로써
코드의 퀄리티를 더 높일 수 있을거 같습니다. 오늘은 여기까지입니다. 감사합니다~!


함께 읽어보면 좋은 글:

 

Swift Enum의 활용 (구조체 또는 클래스 대신 열거형으로 정리해봐요)

Enum은 특정한 이름을 정의하고 값 대신에 사용하는 기능으로 아래와 같이 사용하는 경우가 많습니다. Enum Coffee { case Macchiato case Espresso } Enum에 대해 공부하고 있는데요. 그 중에 실전에서 활용하

leviblog.tistory.com



참조:
https://velog.io/@hope1053/iOS-unknown-default
https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0