[Swift]열거형

한상욱·2025년 10월 10일

Swift문법

목록 보기
12/12
post-thumbnail

들어가며

이 글은 Swift 문법 정리글입니다.

열거형(Enum)

Swift의 열거형 클래스는 다른 언어에서 제공하는 열거형과 다르게 다양한 여러 기능을 제공합니다.

Swift의 Enum은 구조체(Struct)처럼 값타입이며 정의는 대문자, 각 case는 소문자 카멜케이스를 따릅니다.

enum 이름 {
    case 이름1
    case 이름2
    case 이름3, 이름4, 이름5
    // ...
}

각 case는 그 자체가 고유한 값이며, case는 여러 값을 가질 수 있습니다.

예를 들어, 아래와 같이 정의된 열거형을 정의해보겠습니다.

enum WeekDay {
	case mon
    case tue
    case wed
    case thu, fri, sat, sun
}

정의된 열거형은 타입과 케이스를 모두 사용해서 정의할 수 있으나, 명확하게 타입이 정의되었다면 타입은 생략할 수 있습니다.

let day1 = WeekDay.mon
let day2 : WeekDay
day2 = .tue

열거형은 보통 switch case문에서 가독성을 위해 많이 사용되는 편입니다. swift에서 각 타입에 대한 모든 상황을 정의한다면 default를 정의할 필요가 없습니다.

switch day {
	case .mon, .tue, wed, thu, fri:
    	print("평일")
    case .sat, .sun:
    	print("주말")
}

하지만, case를 전부 정의하지 않은 경우에는 default를 정의해야 합니다.

switch day {
	case .mon, .tue, wed, thu, fri:
    	print("평일")
    default:
    	print("주말")
}

열거형은 원시값(rawValue)을 가질 수 있습니다.
원시값을 갖기 위해서는 Hashable 프로토콜을 준수하는 타입을 함께 정의단계에서 명시해야 합니다.

아래 예시는 Int 타입을 원시로 갖는 열거형을 정의한 예시입니다.

enum WeekDay: Int {
    case mon = 0
    case tue = 1
    case wed = 2
    case thu = 3, fri = 4, sat = 5, sun = 6
}

중요한 것은 같은 case더라도 정의된 case는 고유한 값이므로 원시값도 각각 정의해야 합니다.

위 상황은 Int가 원시값으로 정의되어 있습니다. 처음값을 원시값으로 지정한다면 나머지 원시값은 자동으로 1 증가된 형식으로 지정됩니다.

enum WeekDay: Int {
    case mon = 0
    case tue
    case wed
    case thu, fri, sat, sun
}
let day : WeekDay = .sat
print(day.rawValue)
>> 5

다만, String이나 다른 타입같은 경우 원시값 추론이 불가능하기에 다른 경우에서는 타입이 출력됩니다.

enum WeekDay: String {
    case mon = "월"
    case tue = "화"
    case wed
    case thu, fri, sat, sun
}
let day : WeekDay = .sat
print(day.rawValue)
>> "sat"

열거형은 메소드도 같이 정의할 수 있습니다.

enum WeekDay {
    case mon
    case tue
    case wed
    case thu, fri, sat, sun
    
    func printMessage() {
        switch self {
        case .mon, .tue, .wed, .thu, .fri:
            print("평일입니다.")
        case .sat, .sun:
            print("주말입니다.")
        }
    }
}
let day : WeekDay = .sat
day.printMessage()
>> "주말입니다."
profile
자기주도적, 지속 성장하는 모바일앱 개발자의 기록

0개의 댓글