[Swift5] Enumerations 1

Junyoung Park·2022년 3월 6일
0

Swift5 Docs

목록 보기
17/37
post-thumbnail
  • 다음은 Swift 5.6 Doc의 Enumerations 공부 내용을 정리했음을 밝힙니다.

Enumerations

열거를 통해 관련 있는 값을 그룹화해 타입 세이프한 방법으로 코드 상에 적용할 수 있다.

스위프트가 지원하는 열거의 특징은 다음과 같다.

C 언어는 정수 집합에 각 이름을 할당하는 방법으로 열거를 지원했다. 반면 스위프트는 문자열, 캐릭터, 정수, 실수 등 다양한 타입으로 열거를 지원한다. (C 방식에서 타입 지원이 유연해짐)

열거 사용 문법

  • enum 키워드를 통해 하나씩 열거 케이스(enumeration cases)를 정의할 수 있다.
enum CompassPoint {
    case north
    case south
    case east
    case west
}

enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

var directionToHead = CompassPoint.west
directionToHead = .east

C와 다르게 각 케이스에 정수 값이 할당되는 게 아니라, 그 자체로 하나의 타입이 된다.

directionToHead 변수에 CompassPoint 타입의 케이스 west가 할당되었는데, 이는 특정 정수 값이 할당된 게 아니라 사전에 정의한 열거 타입이 그대로 할당된 것이다.

이후 열거 케이스를 변경할 때에는 CompassPoint라는 열거 타입을 다시 한 번 코딩할 필요 없이 .을 통해서 입력 가능한데, 이는 앞의 directionToHead 변수를 통해 타입 추론이 가능하기 때문이다.

스위치에 열거 타입 값 매칭

스위치 문을 쓸 때 열거형을 활용할 수 있다.

directionToHead = .south
switch directionToHead {
case .north:
    print("Lots of planets have a north")
case .south:
    print("Watch out for penguins")
case .east:
    print("Where the sun rises")
case .west:
    print("Where the skies are blue")
}
// Prints "Watch out for penguins"

directionToHeadCompassPoint 열거 타입이고, 스위치 문을 통해 값 별 조건을 줄 수 있다.

모든 열거 케이스를 작성하기 힘들 때에는 디폴트 조건문을 줄 수도 있다.

let somePlanet = Planet.earth
switch somePlanet {
case .earth:
    print("Mostly harmless")
default:
    print("Not a safe place for humans")
}
// Prints "Mostly harmless"

열거 케이스 반복

열거형을 사용할 때 열거 케이스를 컬렉션으로 받으면 사용하기 편리하다. : CaseIterable을 열거형 이름 다음에 작성하고, allCases를 그 열거 타입 이름 뒤에 작성해 컬렉션처럼 사용하자.

enum Beverage: CaseIterable {
    case coffee, tea, juice
}
let numberOfChoices = Beverage.allCases.count
print("\(numberOfChoices) beverages available")
// Prints "3 beverages available"

for beverage in Beverage.allCases {
    print(beverage)
}
// coffee
// tea
// juice

C처럼 열거 케이스로 선언된 값을 정수와 연관해 생각할 필요가 없다.

profile
JUST DO IT

0개의 댓글