8-1.열거형 개념(enumerations)

🌈 devleeky16498·2022년 4월 14일
0

열거형은 관련된 값의 그룹을 위한 일반 타입을 정의하고 코드에서 타입-세이프 방법으로 값을 동작하게 도와준다. 열거형은 각 케이스에 값을 제공하지 않아도 상관이 없다. 이는 그 자체로 1급 타입이다. 열거형의 현재값에 대한 추가 정보를 제공하는 계산된 프로퍼티 등 클래서에스 지원되는 많은 기능을 채택할 수 있다. 케이스 초기값을 설정하기 위해 초기화를 정의할 수도 있으며, 프로토콜 준수도 가능하다.

열거형 구문

  1. 열거형은 enum 키워드와 중괄호 안에 모든 정의를 위치시켜 나타내게 된다.
enum SomeEnumerations {
	// 열거형 정의
}

enum CompassPoint {
	case north
    case east
    case south
    case west
}
//열거형 안에 정의된 값들은 열거형 케이스이다. 
//이 때 case라는 키워드를 통해서 케이스를 정의해준다.

enum CompassPoint {
	case north, east, south, west
}
//열거형 케이스는 다음과 같이 한줄로 명시가 가능하다.
  1. 각 열거형 정의는 새로운 타입으로 정의한다. 열거형의 타입은 그들의 이름이다.
var directionToHead = CompassPoint.west
//다음과 같이 앞에 붙는 이름이 그 타입 자체가 된다. 

var directionToHead = .west
 //다음과 같이 선언하는 경우 그 열거형이 자동으로 타입 유추된다.
 //var directionToHead : CompassPoint = .west 다음과 동일하다.

Switch 구문에서 열거형 값 일치

  1. switch 구문으로 각각의 열거형 값을 일치 가능하다. 흐름제어에서 언급했듯, 스위치 구문은 열거형을 고려할 때 완벽해야 하며, 빠지는 케이스가 있어서는 안된다.
  directionToHead = .south
  
 switch directionToHead {
 	case .north:
    	print("north")
 	case .south:
    	print("north")
 	case .east:
    	print("north")
  	case .west:
    	print("north")
 //다음과 같이 스위치 구믄을 통해서 열거형 값에 따른 동작을 정의가능하다.
  1. 열거형에서 기타 케이스에 대한 처리가 명확하지 않은 경우 default 케이스를 정의할 수 있다.
let somePlanet = Planet.earth
switch somePlanet {
	case .earth: 
    	print("earth!")
    default:
    	print("Not a safe place for humans")
}
//다음과 같이 예외케이스를 하나로 묶어서 처리 가능하다.

열거형 케이스의 반복

  1. 일부 열거형의 경우 열거형의 모든 케이스를 수집해야할 경우가 있다. 이럴 경우 열거형 뒤에 :CaseIterable을 작성하여 활성화한다. 스위프트는 열거형 타입에 allCases 프로퍼티로 모든 케이스를 수집 후 방출한다. 쉽게 말하면 열거형의 케이스에 대한 루프를 적용할 수 있다.
enum Beverage : CaseIterable {
	case coffee, tea, juice
}

let numberOfChoice = Beverage.allCases.count
//3을 가지게 된다. count프로퍼티를 통해서 배열의 케이스 갯수에 접근 가능하다.

for value in Beverage.allCases {
	print(value)
}
//순차적으로 커피 차 쥬스를 출력한다.
profile
Welcome to Growing iOS developer's Blog! Enjoy!🔥

0개의 댓글