enum 열거형 (feat. CaseIterable)

hoBahk·2021년 10월 12일
1

enum 열거형


오늘은 enum에 대해서 알아보겠습니다.

열거형

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

열거형은 다름 같은 경우에 사용하면 좋습니다.

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

기본 문법

열거형의 이름은 타입이므로 맨앞에 대문자를 사용합니다.
한 항목당 한줄 씩 적을 수 도 있고 한줄에 모두 적을 수도 있습니다.

enum Phone {
	case iphone
    case Galaxy
    case shaomi
    case LG
    case Blackberry
}

enum Phone {
	case iphone, Galaxy, shaomi, LG, Blackberry
}

원시값

열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시값(Raw Value)도 가질 수 있습니다.
원시값을 지정하고 싶다면 아래와 같이 열거형 이름 오른쪽에 타입을 명시해주고 각 항목마다 옆에 원시값을 적어줍니다.
또 원시값을 사용하고 싶다면 rawValue 프로퍼티를 사용합니다.

enum Phone: String {
	case iphone = "아이폰"
    case Galaxy = "갤럭시"
    case shaomi = "샤오미"
    case LG = "엘지"
    case Blackberry = "블랙베리"
}

let myPhone: Phone = Phone.iphone
print(myPhone.rawValue) // 아이폰 

enum과 caseIterable를 사용하여 항목 순회

enum 타입에서 caseIterable프로토콜을 채택하여 allCases타입 프로토콜을 통해 모든 케이스의 컬렉션을 생성할 수 있다.
allCases를 사용하면 enum의 항목들을 배열처럼 사용할 수 있습니다.
아래와 같이 randomElement()을 사용하여 랜덤으로 뽑을 수도 있고,
map과 같은 고차함수를 이용하여 enum의 항목들을 출력해 줄 수도 있습니다.

enum Phone: String, CaseIterable {
    case iphone = "아이폰"
    case Galaxy = "갤럭시"
    case shaomi = "샤오미"
    case LG = "엘지"
    case Blackberry = "블랙베리"
}

if let buyPhone = Phone.allCases.randomElement(){
    print(buyPhone)
} // 항목 랜덤으로 출력

let buyPhone = Phone.allCases.map({"\($0)"}).joined(separator: ", ")
print(buyPhone) //iphone, Galaxy, shaomi, LG, Blackberry
profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글