✅ 열거형(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들은 모두 해당 블록에서 처리됩니다.