[iOS] @unknown default

린다·2021년 10월 22일
1

Learning iOS

목록 보기
7/13
post-thumbnail

@unknown default

아래의 내용은 해당 링크를 번역한 내용입니다!

@unknown default는 Swift 5에서 소개된 개념입니다.
이는 우리가 Swift enum과 일할 수 있는 새로운 방법이며 미래의 변화에 대해 준비할 수 있도록 도와주는 방법입니다.

Switch문은 알려진 경우들을 커버하지만 CLAuthorizationStatus는 미래 버전에 추가될 수도있는 알려지지않은 값들을 가질 수 있습니다.

다음과 같이 switch문을 작성하면 swift는 미래에 추가될 수 있는 알려지지 않은 값에 대해 미리 준비할 수 있도록 @unknown default를 추가할 것을 권장하고 있습니다.

unknown value에 대해 미리 준비해야하는 이유는 바로 애플의 API 확장 프로세스때문입니다. 만약 애플이 추후에 CLAuthorizationStatus에 새로운 케이스를 추가하는 경우, 이는 대비되지 않은 변화이기 때문에 코드에 문제가 생기게 됩니다. 애플은 이를 a source-breaking change라고 말하고 있습니다.ㄴ

이때 enum의 종류에도 두 개가 있다는 것을 참고해야합니다. frozen enum과 non-frozen enum이 있습니다. 이름에서 알 수 있듯이 frozen enum은 이제 더이상 변화가 일어나지 않을(meaning they will never get any new cases) 고정된 enum이고 non-frozen enum은 추후에 변화가 일어날 수 있는 enum을 뜻합니다. 따라서 non-frozen enum을 다룰 때는 @unknown 키워드가 필요합니다.

이에 덧붙여 버전의 변화가 사용자 정의 enum에 영향을 끼치지 않는 이상, 사용자 정의 enum은 @unknown 키워드를 필요로 하지 않습니다.

default와 @unknown default의 차이

일반적으로는 @unknown default는 일반 default와 동일하게 작동합니다. 가장 큰 차이점은 알려진 모든 요소들이 match되지 않는 경우에 컴파일러가 경고할 것 이라는 점입니다.

  • @unknown default는 아직 알려지지 않은 케이스들에 대한 대비이기 때문에 이를 제외한 모든 경우들이 언급돼있어야합니다. 만약 그렇지 않은 경우, 모든 경우를 대비하라는 경고가 뜨는 것을 확인할 수 있습니다.
  • 하지만 default는 언급되지 않은 모든 경우들에 대한 기본값을 제공하는 것이기 때문에 언급되지 않은 경우가 있어도 경고가 뜨지 않습니다.

0개의 댓글