You are currently viewing [Swift] enum
swift

[Swift] enum

✅ 열거형(enum)이란?

열거형(Enumeration, 줄여서 enum)은 미리 정해진 값들의 집합을 표현할 때 사용됩니다.

예시로 무지개의 색을 생각해봅시다.

무지개의 색은 고정된 7가지이고 더 늘어나거나 줄어들 일이 없습니다.

이처럼 **값의 종류가 한정적(finite)**인 경우 enum이 가장 적절합니다.

Swift
enum ColorsOfTheRainbow {
    case red, orange, yellow, green, blue, indigo, violet
}

또는 아래처럼 각각 줄로 적는 방식도 같은 의미인데, 단지 스타일 차이입니다.

Swift
enum ColorsOfTheRainbow {
    case red
    case orange
    case yellow
    case green
    case blue
    case indigo
    case violet
}

✅ enum은  새로운 타입을 만든다

enum을 정의하면 기존의 Int, String 같은 것처럼 나만의 타입을 만든 것입니다.

Swift
let color: ColorsOfTheRainbow = .blue
  • 변수/상수 color에는 무지개 색 중 하나만 담을 수 있습니다.
  • .brown 같이 enum에 없는 값을 넣으면 오류가 발생합니다.
  • 타입 추론이 가능하므로 이렇게 더 간단하게 쓸 수도 있습니다:
Swift
let color = ColorsOfTheRainbow.red
// 또는
let color: ColorsOfTheRainbow = .red

✅ 실제 앱에서 enum 사용하는 예시

앱의 테마(모드)를 나타낸다고 생각해봅시다.

Swift
enum AppTheme {
    case lightMode, darkMode, christmasMode, easterMode
}

var appTheme: AppTheme = .darkMode

테마에 따라 화면 색상이나 문구(title)를 바꾸고 싶다면 if / else if 를 이렇게 쓸 수도 있지만…

Swift
var title = ""

if appTheme == .darkMode {
    title = "Dark Mode Active"
} else if appTheme == .lightMode {
    title = "Light Mode Active"
} else if appTheme == .christmasMode {
    title = "Christmas Mode Active"
}

이런 방식은 새로운 테마를 추가했을 때(예: .easterMode) 각 곳마다 코드를 수정해야 하기 때문에 위험합니다.


✅ switch 구문과 함께 쓰면 더 안전!

Swift
switch appTheme {
case .lightMode:
    title = "Light Mode Active"
case .darkMode:
    title = "Dark Mode Active"
case .christmasMode:
    title = "Christmas Mode Active"
case .easterMode:
    title = "Easter Mode Active"
}
  • switch 는 모든 경우를 반드시 고려하도록 강제하므로 열거형과 함께 사용할 때 매우 안전합니다.
  • 만약 누락된 경우가 있다면 컴파일 오류로 알려줍니다 (“must be exhaustive”)

✅ 여러 케이스를 묶고 싶을 때

Swift
switch appTheme {
case .lightMode, .darkMode:
    title = "General Theme"
case .christmasMode:
    title = "Christmas Mode Active"
case .easterMode:
    title = "Easter Mode Active"
}
  • 여러 case를 쉼표로 나열해서 동일한 동작 처리 가능.

✅ 아무것도 하고 싶지 않은 경우

Swift
case .lightMode:
    break   // 아무 작업도 하지 않음

✅ 기본값(default) 처리

Swift
switch appTheme {
case .christmasMode:
    title = "Christmas Mode Active"
case .easterMode:
    title = "Easter Mode Active"
default:
    title = "General Theme"
}
  • 위처럼 default를 쓰면 다른 case들은 모두 해당 블록에서 처리됩니다.