본문 바로가기
카테고리 없음

11. 열거형(enum)과 관련 기능

by swifttt 2025. 4. 1.

 

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의 열거형은 단순한 값 집합 그 이상입니다. 연관 값, 원시 값, 메서드 정의, 패턴 매칭 등 다양한 기능을 제공함으로써 객체지향적이고 타입 안정적인 프로그래밍을 가능하게 합니다.
많은 경우 클래스나 구조체보다 더 간단하고 명확한 모델링이 가능하므로, 설계 초기 단계에서 적극적으로 활용하는 것이 좋습니다.