iOS - Swift

[iOS/Swift/Basic] 열거형 Enumerations : 원시값 Raw Values, 연관값 Associated Values

개발자 수니 2024. 1. 24. 19:30
728x90
반응형

열거형 Enumerations

  • 연관된 항목들을 묶어서 표현할 수 있는 타입
  • 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가

열거형(Enumerations)을 사용하는 경우

  • 제한된 선택지를 주고 싶을 때
  • 정해진 값 외에는 입력받고 싶지 않을 때
  • 예상된 입력 값이 한정되어 있을 때

열거형(Enumerations)의 선언

// Pay Enumerations 선언
enum Pay {
    case cash   // 현금
    case card   // 카드
    case etc    // 기타
    case empty  // 결제 종류 없음
}
// Pay Enumerations 선언 - 한 줄 버전
enum Pay {
    case cash, card, etc, empty
}

열거형(Enumerations) 변수의 생성 및 변경

var userPay: Pay = Pay.empty
// 같은 타입인 Pay 내부의 항목으로만 변경 가능
userPay = .card

원시 값 Raw Values 

열거형(Enumerations)은 항목의 원시 값(Raw Values)을 가질 수 있다.

원시 값(Raw Values) 지정과 사용

// Raw Values 지정
enum Pay: String {
    case cash   = "현금"
    case card   = "카드"
    case etc    = "기타"
    case empty  = "결제 종류 없음"
}

// Raw Values 사용
var userPay: Pay = .card
print("회원님의 결제 타입은 '\(userPay.rawValue)' 입니다.") // 회원님의 결제 타입은 '카드' 입니다.

원시 값(Raw Values) 자동 처리

열거형(Enumerations) 선언 시, 원시 값(Raw Values)을 지정하지 않을 경우 Swift는 원시 값(Raw Values)을 자동으로 처리

  • String타입 enum
// String enum
enum Pay: String {
    case cash   = "현금"
    case card   = "카드"
    case kakaopay
}
let myPay = Pay.kakaopay
print("나의 결제 타입은 '\(myPay.rawValue)' 입니다.") // 나의 결제 타입은 'kakaopay' 입니다.

 

  • Int타입 enum
// Int enum
enum Numbers: Int {
    case zero, one, two
    case ten = 10
}

print("\(Numbers.zero.rawValue) - \(Numbers.one.rawValue) - \(Numbers.two.rawValue) - \(Numbers.ten.rawValue)")
// 0 - 1 - 2 - 10

원시 값(Raw Values)을 사용한 열거형(Enumerations)초기화

enum Pay: String {
    case cash   = "현금"
    case card   = "카드"
    case kakaopay
}

// Raw Values를 사용한 Enumerations 초기화
var card = Pay(rawValue: "카드")  // card
var kakaoPay = Pay(rawValue: "카카오 페이") // nil

 

연관 값 Associated Values 

열거형(Enumerations)의 각 항목(case)은 연관 값(Associated Values)을 가질 수 있다.

// Associated Values을 가지는 Enumerations
enum Menu {
    case set(burger: String, drink: String)
    case single(burger: String)
}

// 사용
var order: Menu = Menu.single(burger: "불고기") // 불고기 버거 단품
order = .set(burger: "치즈", drink: "콜라")   // 치즈 버거 + 콜라 세트

 

  • 여러 열거형(Enumerations) 응용
enum Burger {
    case bulgogi
    case shrimp
    case cheese
}

enum Drink {
    case coke
    case fanta
}

// Associated Values을 가지는 Enumerations
enum Menu {
    case set(burger: Burger, drink: Drink)
    case single(burger: Burger)
}

// 사용
var order: Menu = Menu.single(burger: .bulgogi) // 불고기 버거 단품
order = .set(burger: .cheese, drink: .coke)   // 치즈 버거 + 콜라 세트

 

 

 

 

🙋🏻‍♀️ 참고

야곰, ⌜스위프트 프로그래밍: Swift5⌟, 한빛미디어(2019)

728x90
반응형