Swift: enum / 열거형 기초

Wooyo·2023년 10월 18일
0
post-thumbnail

1. 열거형

  • 다른언어의 열거형과 다름
  • 각 case 는 소문자 camel case
  • 각 case 는 그 자체가 고유값
  • 각 case 는 한줄 / 개별 / 한줄 여러개 정의가능
  • 상속 불가
  • 유사한 종류의 여러값을 유의미한 이름으로 한 곳에 모아 정의
  • 값 타입
  • 열거형 자체가 하나의 테이터 타입
  • 열거형 case 하나하나 전부 하나의 유의미한 값으로 취급
enum EnumName {
	case case1
	case case2
	case case3, case4, case5
}

2. 열거형 사용

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

// 열거형 타입과 케이스 모두 사용가능
var day: Weekday = Weekday.mon

// 타입이 명확하다면 .케이스 표현가능
day = .thu

// switch 문 사용가능
// 모든 열거형 케이스 작성시 defaut 작성 필요없음
switch day {
	case .mon, .tue, .wed, .thu:
    	print("평일")
    case Weekday.fri:
    	print("불금")
    case .sat, .sun:
    	prict("주말")
}

// 평일

3. 원시값

  • C 언어의 enum 처럼 정수값 가능.
  • rawValue 사용
enum Fruif: Int {
	case apple = 0
    case grape = 1
    case peach
    // peach는 자동적으로 2의 값을 가짐
    // mongo를 넣는 가면 원시값 0 을 정의 불가
}
  • 정수 타입 뿐만 아니라 Hashable Protocol을 따르는 모든 타입이 원시값의 타입으로 지정 가능
enum School: String {
	case elementary = "초"
	case middle = "중"
    case high
}
prict(School.middle.rawValue)
// 중

// 원시값이 지정되지 않았으면 case 이름을 원시값으로 사용
prict(School.high.rawValue)
// high
  • 메서드도 추가 가능
enum Month {
	case dec, jan, fab
    case mar, apr, may
    case jun, jul, aug
    case sep, oct, nov
    
    func prictMessage(){
    	switch self {
        	case .mar, .apr, .may:
            	print("봄")
            case .jun, .jul, .aug:
            	print("여름")
            case .sep, .oct, .nov:
            	print("가을")
            case .dec, .jan, .feb:
            	print("겨울")
        }
    }
}

Month.mar.prictMessage()

// 봄
profile
Wooyo의 개발 블로그

0개의 댓글