Swift에서 열거형(enum)은 관련된 값을 하나의 이름으로 그룹화하고, 그 안에서 명확한 선택지를 정의할 수 있는 타입입니다.
단순한 열거뿐만 아니라 연관 값, 원시 값, 메서드 정의, 패턴 매칭 등 다양한 기능을 지원하여 매우 강력하게 활용할 수 있습니다.
타입 안전성을 보장하면서도 코드의 가독성과 유지 보수성을 높이는 데 매우 유용합니다.
1. 기본 열거형 정의
enum Direction {
case north
case south
case east
case west
}
let move = Direction.north
Direction
이라는 열거형은 네 방향을 나타내며, 값은 점 표기법(.
)으로 접근합니다.
2. 축약된 선언 방식
enum Direction {
case north, south, east, west
}
3. switch문과 열거형
let direction = Direction.east
switch direction {
case .north:
print("북쪽으로 이동")
case .south:
print("남쪽으로 이동")
case .east:
print("동쪽으로 이동")
case .west:
print("서쪽으로 이동")
}
switch
문에서 열거형의 모든 경우를 다루지 않으면 컴파일 오류가 발생합니다.
4. 연관 값(Associated Values)
enum Barcode {
case upc(Int, Int, Int, Int)
case qr(String)
}
let productCode = Barcode.qr("abc-12345")
switch productCode {
case .upc(let number1, let number2, let number3, let number4):
print("UPC: \(number1)-\(number2)-\(number3)-\(number4)")
case .qr(let code):
print("QR 코드: \(code)")
}
각 케이스마다 서로 다른 타입의 값을 가질 수 있습니다.
5. 원시 값(Raw Values)
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
print(Planet.earth.rawValue) // 3
enum Direction: String {
case north = "N"
case south = "S"
case east = "E"
case west = "W"
}
6. 메서드와 열거형
enum Weekday {
case monday, tuesday, wednesday, thursday, friday
func isWeekend() -> Bool {
return self == .saturday || self == .sunday
}
}
let day = Weekday.friday
print(day.isWeekend()) // false
7. 열거형의 유용한 기능
- 열거형은
Equatable
,Comparable
,Codable
같은 프로토콜을 쉽게 채택할 수 있습니다. CaseIterable
을 사용하면 모든 케이스를 배열로 가져올 수 있습니다.
enum Beverage: CaseIterable {
case coffee, tea, juice
}
for drink in Beverage.allCases {
print(drink)
}
마무리
Swift의 열거형은 단순한 값 집합 그 이상입니다. 연관 값, 원시 값, 메서드 정의, 패턴 매칭 등 다양한 기능을 제공함으로써 객체지향적이고 타입 안정적인 프로그래밍을 가능하게 합니다.
많은 경우 클래스나 구조체보다 더 간단하고 명확한 모델링이 가능하므로, 설계 초기 단계에서 적극적으로 활용하는 것이 좋습니다.