스위프트의 열거형은 다른 언어에 비해 매우 강력한 기능을 가지고 있다!
처음에 C에서 열겨형을 사용할 때, 생각보다 너무 기능이 제한적이여서 아쉬웠던 적이 있는데,
Swift는 정말 열거형의 기능을 잘 만들어 둔 것 같다.
아래 예시들을 보면서 활용가능한 방법들을 알아보자!
기본 형태
enum도 타입 이름이므로 이름은 UpperCamelCase로 적는다.
각 case는 lowerCamelCase로 적는다.
•
각각의 case가 고유의 형태로 취급이 된다.
enum Weekday {
case mon
case tue
case wed
case thr, fri, sat, sun
}
Swift
복사
위 예시처럼 한 줄씩 선언을 해도 되고, 한 줄에 쉼표(,)로 구분해서 한번에 작성해도 상관없다.
enum을 호출할 때에는 Int나 String 처럼 사용할 수 있다.
var day: Weekday = Weekday.mon
Swift
복사
호출한 이후 부터는 열거형(enum)의 이름을 제외하고 작성하여도 무방하다.
var day: Weekday = Weekday.mon
day = .tue
Swift
복사
switch-case문을 활용하면 열거형 타입을 잘 활용할 수 있다.
열거형 타입은 한정되어 있다고 컴파일러가 인지하기 때문에 case에 해당하는 모든 경우를 구현한다면, default를 적지 않아도 된다! 하지만 case에서 하나라도 빼고 작성한다면 default가 꼭 필요하다.
switch day {
case .mon .tue .wed .thr:
print("출근 ㅜㅜ")
case .fri:
print("불금!!")
case .sat .sun:
print("주말~~!~!")
}
Swift
복사
원시값 활용하기
만약 C언어처럼 정수형 타입을 사용하고 싶다면 원시형을 선언해 주면 된다.
C언어처럼 첫 값만 지정해줘도 된다.
enum Data: Int {
case apple = 0
case banana
case grape
//case lemon = 0 // case는 항상 다른 값을 가져야 한다.(같은 값 X)
}
Swift
복사
물론 정수타입 뿐만 아니라 String 등의 타입도 가능하다.(hashable을 따르는 모든 타입들)
enum Color: String {
case apple: "빨강"
case banana: "노랑"
case grape
}
Swift
복사
이 때, 초기화가 된 값들은 호출 했을 때, 해당 값들을 불러오지만, 포도와 같이 초기화가 되지 않은 값들은 case의 이름을 가져온다.
print("사과의 색깔? \(Color.apple.rawValue)")
// 사과의 색깔? 빨강
print("포도의 색깔? \(Color.grape.rawValue)")
// 포도의 색깔? 포도
Swift
복사
이렇게 rawValue에 값이 없는 경우가 있기 때문에 변수로 사용하려면 옵셔널 타입으로 반환해 주어야 한다.
let fruit: Fruit? = Fruit(rawValue: 0)
Swift
복사
아래처럼 if-let 구문을 활용해서 optional binding을 활용할 수 있다.
if let fruit: Fruit(rawValue: 5) {
print("색깔은 \(fruit)!")
} else {
print("해당 과일이 없습니다.")
}
Swift
복사
열거형 타입에 함수 넣기
마지막으로 Swift에서는 열거형 타입에 함수를 넣을 수 있다.
enum Month {
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
case dec, jan, feb
func printMessage() {
switch self {
case .mar, .apr, .may:
print("봄!")
case .jun, .jul, .aug:
print("여름!")
...
}
}
}
Swift
복사