๐—ถ๐—ข๐—ฆ/๐Ÿ iOS ๊ฐœ๋…ํŽธ

[iOS / Swift] Enum์ด๋ž€?

z_ero 2025. 11. 4. 16:48

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

์—ด๊ฑฐํ˜•(Enum)์€ ์—ฐ๊ด€๋œ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค.

 

Swift์—์„œ๋Š” ๋‹จ์ˆœํ•œ ๊ฐ’ ๋ชฉ๋ก์„ ๋„˜์–ด, ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ํ‘œํ˜„๋ ฅ์„ ๋ชจ๋‘ ๊ฐ–์ถ˜ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ,

๊ฐ case๋Š” ๋…๋ฆฝ์ ์ธ ๊ฐ’์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์—ฐ๊ด€๊ฐ’(Associated Value) ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ• ๊นŒ์š”?

์—ด๊ฑฐํ˜•์€ ๋น„์Šทํ•œ ์„ฑ๊ฒฉ์˜ ์—ฌ๋Ÿฌ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ฒ”์ฃผ๋กœ ๋ฌถ์–ด ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ , ์ž˜๋ชป๋œ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ Enum์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์œผ๋กœ,

ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋‚˜ ์ข…๋ฅ˜๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค!

 

๐ŸŽ ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ String์ด๋‚˜ Int๋กœ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋ฉด, ์ž˜๋ชป๋œ ์ž…๋ ฅ์ด๋‚˜ ์˜คํƒ€๋กœ ์ธํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜์ด๋ง๊ตฌ์–ผ(Hilingual) ์•ฑ์—์„œ iOS ํŒŒํŠธ์˜ ํŒ€์›์„ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

let iosMember1 = "zero"
let iosMember2 = "one"
let iosMember3 = "tew" // ์˜คํƒ€ ๋ฐœ์ƒ

 

์ด์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด๋กœ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ "yaungjuuu"์ฒ˜๋Ÿผ ์˜คํƒ€๊ฐ€ ๋‚˜๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—์„œ์•ผ ๋“œ๋Ÿฌ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์— ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐ’๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜คํƒ€๋‚˜ ์ž˜๋ชป๋œ ์ž…๋ ฅ์ด ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค!

๋˜ํ•œ ์ฝ”๋“œ์˜ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•ด์ ธ ๊ฐ€๋…์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ด…์‹œ๋‹ค.

enum IosMember {
    case zero
    case one
    case two
}

var member: IosMember = .zero

 

์ด์ œ member์—๋Š” .youngseo, .nayeon, .youngju ์™ธ์˜ ๊ฐ’์€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Swift์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์ด ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ, ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์ฆ‰์‹œ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜๊ฒ ์ฃ .

์ฆ‰, ์—ด๊ฑฐํ˜•์€ ์ •ํ•ด์ง„ ์„ ํƒ์ง€ ์•ˆ์—์„œ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ’์„ ๋‹ค๋ฃจ๋„๋ก ๋ณด์žฅํ•˜๋Š” ์ž๋ฃŒํ˜•์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐ŸŽ ์›์‹œ๊ฐ’ (Raw Value)

1. ์›์‹œ๊ฐ’์ด ์—†๋Š” ์—ด๊ฑฐํ˜•

์›์‹œ๊ฐ’์ด๋ž€ ๊ฐ case์— ๊ณ ์ •๋œ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์›์‹œ๊ฐ’์ด ์—†๋Š” ์—ด๊ฑฐํ˜•์€ ๊ทธ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋กœ, ๊ฐ case์— ๋ณ„๋„์˜ ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, ์•„๋ž˜์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ์ƒํƒœ๋‚˜ ๋‹จ๊ณ„๋งŒ ๊ตฌ๋ถ„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—ด๊ฑฐํ˜•์ž…๋‹ˆ๋‹ค.

enum HomeViewState {
    case idle        // ์•„๋ฌด ๋™์ž‘๋„ ์—†๋Š” ์ƒํƒœ
    case loading     // ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘
    case success     // ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์„ฑ๊ณต
    case failure     // ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์‹คํŒจ
}

 

์œ„ ์ฝ”๋“œ๋ฅผ ์‰ผํ‘œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•œ ์ค„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

enum HomeViewState { case idle, loading, success, failure }

 

์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

var currentState: HomeViewState = .loading

 

์ด์ฒ˜๋Ÿผ ์—ด๊ฑฐํ˜• ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์ธ์‹๋˜๋ฉฐ, . ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ case๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜๋„์น˜ ์•Š์€ ๊ฐ’์˜ ๋Œ€์ž…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ˆ ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒ ์ฃ !

 

2. ์›์‹œ๊ฐ’์ด ์žˆ๋Š” ์—ด๊ฑฐํ˜•

์—ด๊ฑฐํ˜•์˜ ๊ฐ case์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ ์ง€์ •๋˜๋Š” ๊ฐ’์ด ์›์‹œ๊ฐ’์ด๋ฉฐ, ๋ชจ๋“  case๊ฐ€ ๋™์ผํ•œ ํƒ€์ž…์˜ ๊ฐ’ ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Swift์—์„œ Raw Value๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์€ Int, Character, String ์„ธ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐจ๋ก€๋Œ€๋กœ ์•Œ์•„๋ณผ๊ฒŒ์š”!

(1) Intํ˜• ์›์‹œ๊ฐ’

๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ˜•ํƒœ๋กœ, Raw Value๋ฅผ Int๋กœ ์ง€์ •ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒซ ๋ฒˆ์งธ case๋ถ€ํ„ฐ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 1์”ฉ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

enum HTTPStatusCode: Int {
    case success
    case badRequest
    case unauthorized
    case notFound
}

 

์œ„์˜ ์˜ˆ์‹œ์—์„œ success๋Š” 0, badRequest๋Š” 1, unauthorized๋Š” 2, notFound๋Š” 3์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜์ฒ˜๋Ÿผ ์ง์ ‘ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

enum HTTPStatusCode: Int {
    case success = 200
    case badRequest = 400
    case unauthorized = 401
    case notFound = 404
}

 

๊ทธ๋ ‡๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ case์— ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

enum HTTPStatusCode: Int {
    case success = 200
    case badRequest = 400
    case unauthorized = 401
    case notFound
}

 

๋‹ต์€ 402์ž…๋‹ˆ๋‹ค!  ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ง€์ •๋œ case ์ดํ›„์˜ ๊ฐ’์ด ์—†์œผ๋ฉด ์ด์ „ case์˜ Raw Value์— +1์„ ์ž๋™์œผ๋กœ ๋”ํ•ด์ค๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ notFound์—๋Š” 401 ๋‹ค์Œ ๊ฐ’์ธ 402๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๊ฑฐ์ฃ .

โš ๏ธ ๋งŒ์•ฝ Raw Value ํƒ€์ž…์ด Double์ด๋‚˜ Float์ด๋ผ๋ฉด,์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋™์œผ๋กœ “์ด์ „ ๊ฐ’ + 1”์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋ชจ๋“  case์— ๋Œ€ํ•ด ๊ฐ’์„ ์ง์ ‘ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด “Cannot infer raw value” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์š”!

 

(2) Characterํ˜• ์›์‹œ๊ฐ’

Character ํƒ€์ž…์€ ๋ชจ๋“  case์— ์ง์ ‘ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜๋ผ๋„ ์ƒ๋žต๋˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

enum ShortcutKey: Character {
    case save = "S"
    case open = "O"
    case quit = "Q"
}

 

์ด ๊ฒฝ์šฐ ShortcutKey.save.rawValue๋Š” "S"์ž…๋‹ˆ๋‹ค.

โš ๏ธ Character ํƒ€์ž…์€ ๋ฌธ์ž ๋‹จ์œ„๋กœ๋งŒ ์ €์žฅ๋˜๋ฏ€๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
"A" ๋‹ค์Œ "B"๋กœ ๋„˜์–ด๊ฐ€๋Š” ์‹์˜ ๊ณ„์‚ฐ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

(3) Stringํ˜• ์›์‹œ๊ฐ’

String ํƒ€์ž…์€ Character์™€ ๋‹ฌ๋ฆฌ Raw Value๋ฅผ ์ƒ๋žตํ•˜๋ฉด case ์ด๋ฆ„์ด ๊ทธ๋Œ€๋กœ ๋ฌธ์ž์—ด ๊ฐ’์œผ๋กœ ์ž๋™ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

enum APIEndpoint: String {
    case diaryList
    case userProfile
    case updateNickname
}
  • APIEndpoint.diaryList.rawValue → "diaryList"
  • APIEndpoint.userProfile.rawValue → "userProfile"

์ด ๋ฐฉ์‹์€ ์„œ๋ฒ„ ํ†ต์‹  ์‹œ ์—”๋“œํฌ์ธํŠธ ์ด๋ฆ„์ด๋‚˜ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”๋ฐ์š”~

case ์ด๋ฆ„๊ณผ ์‹ค์ œ ๋ฌธ์ž์—ด ๊ฐ’์ด ์ผ์น˜ํ•˜๋ฏ€๋กœ, ์˜คํƒ€๋ฅผ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ๋„ ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ !

 

3. Raw Value ์ ‘๊ทผ ๋ฐ ์ดˆ๊ธฐํ™”

์—ด๊ฑฐํ˜•์— ์ง€์ •ํ•œ ์›์‹œ๊ฐ’(Raw Value)์€ rawValue ์†์„ฑ์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

enum Fruit: String {
    case apple
    case banana
    case orange
}

print(Fruit.banana.rawValue) // "banana"

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด banana case์˜ ๋ฌธ์ž์—ด ๊ฐ’ "banana"๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

Raw Value๋ฅผ ์ด์šฉํ•ด ์—ด๊ฑฐํ˜• ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ฌธ์ž์—ด์„ ํ†ตํ•ด ํ•ด๋‹น case๋ฅผ ์ฐพ์•„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

let selectedFruit = Fruit(rawValue: "orange")
print(selectedFruit) // Optional(Fruit.orange)

 

"orange"๊ฐ€ ์‹ค์ œ ์กด์žฌํ•˜๋Š” case์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉด nil์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

let invalidFruit = Fruit(rawValue: "melon")
print(invalidFruit) // nil

 

๊ทธ๋ž˜์„œ Raw Value๋ฅผ ํ†ตํ•œ ์ดˆ๊ธฐํ™”์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ํ•ญ์ƒ ์˜ต์…”๋„(Optional) ์ž…๋‹ˆ๋‹ค!

์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Swift์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ต์…”๋„ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ต๋‹ˆ๋‹ค.

 

๐ŸŽ ์—ฐ๊ด€๊ฐ’ (Associated Values)

Raw Value๋Š” ๋ชจ๋“  case๊ฐ€ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” case๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ฃ .

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์Œ์‹ ์ฃผ๋ฌธ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณผ๊นŒ์š”? ์Œ์‹๋งˆ๋‹ค ์ถ”๊ฐ€ ์˜ต์…˜์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”ผ์ž๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์Œ๋ฃŒ๋Š” ์–ผ์Œ ์œ ๋ฌด๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ฃ ?

 

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ ์—ฐ๊ด€๊ฐ’(Associated Values) ์ž…๋‹ˆ๋‹ค.

์—ฐ๊ด€๊ฐ’์€ ๊ฐ case์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

1. ์—ฐ๊ด€๊ฐ’ ์„ ์–ธ

case ์˜† ๊ด„ํ˜ธ ์•ˆ์—, ๊ทธ case์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

enum Order {
    case pizza(size: String)
    case drink(ice: Bool)
    case dessert(name: String)
}

 

2. ์—ฐ๊ด€๊ฐ’ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

case๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ด„ํ˜ธ ์•ˆ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

let order1 = Order.pizza(size: "L")
let order2 = Order.drink(ice: true)
let order3 = Order.dessert(name: "cheesecake")

 

์ด์ œ ๊ฐ ์ฃผ๋ฌธ์€ ํ•˜๋‚˜์˜ ํƒ€์ž…(Order) ์•ˆ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋˜๊ฒ ์ฃ .

 

3. Switch๋ฌธ์œผ๋กœ ๊ฐ’ ๊บผ๋‚ด๊ธฐ

switch๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ฐ case์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

switch order2 {
case .pizza(let size):
    print("ํ”ผ์ž ์‚ฌ์ด์ฆˆ๋Š” \\(size)์ž…๋‹ˆ๋‹ค.")
case .drink(let ice):
    print(ice ? "์–ผ์Œ ์žˆ๋Š” ์Œ๋ฃŒ ์ฃผ๋ฌธ" : "์–ผ์Œ ์—†๋Š” ์Œ๋ฃŒ ์ฃผ๋ฌธ")
case .dessert(let name):
    print("๋””์ €ํŠธ: \\(name)")
}

 

4. if-case ๊ตฌ๋ฌธ

ํŠน์ • case๋งŒ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋• if case๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

if case let .pizza(size) = order1 {
    print("์ฃผ๋ฌธํ•œ ํ”ผ์ž ์‚ฌ์ด์ฆˆ: \\(size)")
}

 

์ด์ฒ˜๋Ÿผ ์—ฐ๊ด€๊ฐ’์€ case๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ํƒ€์ž… ์•ˆ์—์„œ๋„ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ƒํ™ฉ์„ ๋” ์ง๊ด€์ ์ด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒ ์ฃ ?

 

๐ŸŽ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ์—ด๊ฑฐํ˜•

Swift์˜ ์—ด๊ฑฐํ˜•๋„ class๋‚˜ struct์ฒ˜๋Ÿผ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์—ด๊ฑฐํ˜•๋„ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ทœ์น™์— ๋งž์ถฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์‹œ๊ฐ€ ๋ฐ”๋กœ CaseIterable ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

CaseIterable์€ ์—ด๊ฑฐํ˜•์˜ ๋ชจ๋“  case๋ฅผ ์ž๋™์œผ๋กœ ๋ชจ์•„์ฃผ๋Š” ๋ฐฐ์—ด allCases๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ธ๋ฐ์š”.

์ด ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋ฉด ์—ด๊ฑฐํ˜• ์•ˆ์˜ case๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ด…์‹œ๋‹ค!

enum StudyTopic: CaseIterable {
    case swift
    case compose
    case spring
    case design
}

for topic in StudyTopic.allCases {
    print(topic)
}

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

swift
compose
spring
design

 

์ด๋ ‡๊ฒŒ allCases ๋ฐฐ์—ด์„ ํ†ตํ•ด case๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฉ”๋‰ด ๋ชฉ๋ก, ํƒญ ์ด๋ฆ„, ์Šคํ„ฐ๋”” ์ฃผ์ œ์ฒ˜๋Ÿผ ์ •ํ•ด์ง„ ํ•ญ๋ชฉ์„ ํ•œ ๋ฒˆ์— ๋‹ค๋ค„์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒ ์ฃ !

 

โš ๏ธ ๋‹จ, CaseIterable์€ ์—ฐ๊ด€๊ฐ’์ด ์—†๋Š” ์—ด๊ฑฐํ˜•์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ case์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ(์—ฐ๊ด€๊ฐ’)๊ฐ€ ๋‹ค๋ฅด๋ฉด, Swift๊ฐ€ allCases ๋ฐฐ์—ด์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•