์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Swfit] @unknown default / @frozen enum

๐ŸŽ iOS/Swift

by AHN.Jihyeon 2024. 12. 4. 22:48

๋ณธ๋ฌธ

 

 

 


์—ด๊ฑฐํ˜•์€ ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค๋กœ ๋‚˜๋‰˜๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ์ฃผ๋กœ switch๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. 

Swift 5์—์„œ ์†Œ๊ฐœ๋œ @unknown default๋Š” ์—ด๊ฑฐํ˜•(enum) ์ฒ˜๋ฆฌ ์‹œ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ผ€์ด์Šค๋ฅผ ๋Œ€๋น„ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์ด๋‹ค.

 

๐Ÿ”Ž  1 . ์—ด๊ฑฐํ˜•(enum)์˜ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•


1) Frozen Enum (๊ณ ์ • ์—ด๊ฑฐํ˜•)

Frozen Enum์€ ๋” ์ด์ƒ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๊ฒƒ์ด ๋ณด์žฅ๋œ ์—ด๊ฑฐํ˜•์ด๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์—ด๊ฑฐํ˜• ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค.

์ด ์—ด๊ฑฐํ˜•์€ ์ถ”ํ›„์— ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

enum Food {
    case chicken
    case pizza
    case hamburger
}

let myChoice = Food.chicken

switch myChoice {
case .chicken:
    print("์น˜ํ‚จ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.")
case .pizza:
    print("ํ”ผ์ž๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.")
case .hamburger:
    print("ํ–„๋ฒ„๊ฑฐ๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.")
}

์œ„ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ default๋ฅผ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

 

 

2) Nonfrozen Enum (๋น„๊ณ ์ • ์—ด๊ฑฐํ˜•)

Nonfrozen Enum์€ ์ถ”ํ›„ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐํ˜•์ด๋‹ค.

@unknown default๋Š” Nonfrozen Enum(๋น„๊ณ ์ • ์—ด๊ฑฐํ˜•)์—์„œ ์œ ์šฉํ•˜๋‹ค.

Apple์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ด๊ฑฐํ˜• ๋Œ€๋ถ€๋ถ„์ด Nonfrozen Enum์— ์†ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

import AVFoundation

func handleAuthorizationStatus(_ status: AVAuthorizationStatus) {
    switch status {
    case .authorized:
        print("์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.")
    case .denied:
        print("์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.")
    case .restricted:
        print("๊ถŒํ•œ์ด ์ œํ•œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
    case .notDetermined:
        print("๊ถŒํ•œ ์š”์ฒญ ์ „ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.")
    @unknown default:
        print("์ƒˆ๋กœ์šด ์ƒํƒœ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
    }
}

์œ„ ์˜ˆ์‹œ์—์„œ AVAuthorizationStatus๋Š” Nonfrozen Enum์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ, @unknown default๋ฅผ ์‚ฌ์šฉํ•ด ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿ”Ž  2. @unknown default๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž


ํ˜„์žฌ ์œ„ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์–ด @unknown default๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

 

Food ์—ด๊ฑฐํ˜•์— ์ƒˆ๋กœ์šด ์Œ์‹์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋ฉด?

 salad ์ผ€์ด์Šค์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. 

 

default๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ณ„๋„์˜ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์ผ€์ด์Šค์˜ ์•ˆ์ •์„ฑ ๋ณด์žฅ์„ ํ•  ์ˆ˜ ์—†๋‹ค. 

 

๐Ÿ”Ž  3. @unknown default์™€ default ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€


1) default

  • ๋ช…์‹œ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์™ธ๋ถ€ ์—ด๊ฑฐํ˜•์—์„œ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

2)  @unknown default

  • @unknown default๋Š” ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ๋นจ๊ฐ„์ƒ‰ ์—๋Ÿฌ ๋Œ€์‹  ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์—ฌ ์‹ค์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • Nonfrozen Enum์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์‹œ์Šคํ…œ API์—์„œ ์ œ๊ณตํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    unknown default๋Š” ํŠนํžˆ ์™ธ๋ถ€ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

 

๐Ÿ”— Reference 

https://babbab2.tistory.com/146
https://velog.io/@hope1053/iOS-unknown-default

 

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ