열거형

JG Ahn·2024년 10월 9일

swift 기초

목록 보기
13/23

1. 열거형

  • 유사한 종류의 값을 모아 정의
  • enum은 데이터 타입이므로 대문자 카멜케이스로 이름을 정의
  • case는 소문자 카멜케이스 사용
//기본 형태
enum 이름 {
	case 이름1
    case 이름2
    case 이름3, 이름4, 이름5 //한 줄에 여러 항목 정의 가능
    //...
}

2. 열거형 사용

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

//아래 모두 같은 표현
//var day = Weekday.tue
//var day: Weekday = .tue
var day: Weekday = Weekday.tue
day = .mon //열거형의 케이스 축약 사용(타입이 명확할 경우)

/* 축약형
var day: Weekday = .tue
var day = Weekday.tue
*/

//switch 비교값에 열거형 타입 위치시 모든 케이스가 포함되면 default 작성할 필요 없음
switch day {
    case .mon, .tue, .wed, .thu: print("평일")
    case .fri: print("불금")
    case .sat, .sun: print("주말")
}

3. rawValue(원시값)

  • case별로 값을 가짐(동일한 값을 가질 수 없음)
  • Int, String, UInt 등 사용 가능(Hashable 프로토콜 따르는 타입)
enum Fruit: Int {
	case apple = 0
    case grape = 1
    case peach//자동으로 grape보다 1이 증가된 2가 할당됨
}

//rawValue 사용 : [열거형이름.케이스이름.rawValue]
print(Fruit.peach.rawValue)//결과 : 2
enum School: String {
	case elementary = "초등"
    case middle = "중등"
    case high = "고등"
    case university //원시값이 지정되지 않으면 케이스이름을 원시값으로 사용
}

print(School.high.rawValue)//결과 : 고등
print(School.university.rawValue)//결과 : university

4. 원시값을 통한 초기화

//let apple: Fruit = Fruit(rawValue: 0)//오류 : 원시값이 존재하지 않을 경우(nil)에 대비해 옵셔널 타입이 되기 때문에 ?사용
let apple: Fruit? = Fruit(rawValue: 0)

//if let 사용시 rawValue에 해당하는 케이스 바로 사용 가능
if let pick: Fruit = Fruit(rawValue: 1) {
	print(pick)//결과 : grape
} else {
	print("해당 케이스 없음")
}

5. 메소드

  • 열거형에 메소드 추가 가능
enum Month {
    case dec, jan, feb
    case mar, apr, may
    case jun, jul, aug
    case sep, oct, nov
    
    func printMessage() {
        switch self {
        case .mar, .apr, .may:
            print("봄")
        case .jun, .jul, .aug:
            print("여름")
        case .sep, .oct, .nov:
            print("가을")
        case .dec, .jan, .feb:
            print("겨울")
        }
    }
}

Month.dec.printMessage()//결과 : 겨울

0개의 댓글