스위프트의 열거형
2022/12/13(화요일)
[스위프트]
4.5 열거형
열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다. 열거형은 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정희해준 항목 값 외에는 추가/수정이 불가능하다. 그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있다.
열거형은 다음과 같은 경우에 요긴하게 사용할 수 있다.
- 제한된 선택지를 주고 싶을 때
- 정해진 값 외에는 입력받고 싶지 않을 때
- 예상된 입력 값이 한정되어 있을 때
열겨형으로 묶을 수 있는 항목들은 주변 생활에서 많이 찾아 볼 수 있다.
- 무선통신 방식 : WiFi, 블루투스, LTE, 3G, 기타
- 학생 : 초등학생, 중학생, 고등학생, 대학생, 대학원생, 기타
- 지역 : 강원도, 경기도, 경상도, 전라도, 제주도, 충청도
우리는 앞서 열거형을 통하여 연관된 항목들의 그룹을 정의할 수 있다는 사실을 알았다. 다른 프로그래밍 언어에서 열거형을 사용해봤다면 조금 의아할 수 있지만, 스위프트의 열거형은 항목별로 값을 가질 수도, 가지지 않을 수도 있다. 예를 들어 C 언어는 열거형의 각 항목 값이 정수 타입으로 기본 지정되지만, 스위프트의 열거형은 각 항목이 그 자체로 고유의 값이 될 수 있다.
기존 C 언어 등에서 열거형은 주로 정수 타입 값의 별칭 형태로 사용이 될 뿐이었다. 그렇기 때문에 모든 열거형의 데이터 타입은 같은 타입(주로 정수 타입)으로 취급한다. 이는 열거형 각각이 고유의 타입으로 인식될 수 없다는 문제 때문에 여러 열거형을 사용할 때 프로그래머의 실수로 인한 버그가 생길 수도 있다. 그러나 스위프트의 열거형은 각 열거형이 고유의 타입으로 인정되기 때문에 실수로 버그가 일어날 가능성을 원천 봉쇄 할 수 있다.
물론 열거형 각 항목이 원시 값이라는 형태로 (정수, 실수, 문자 타입 등의) 실제 값을 가질 수도 있다. 또한 연관 값을 사용하여 다른 언어에서 공용체라고 불리는 값의 묶음도 구현할 수 있다.
4.5.1 기본 열거형
스위프트의 열거형은 enum이라는 키워드로 선언할 수 있다.
enum School{
case primary
case elementary
case middle
case high
case college
case university
case graduate
}
School 이라는 이름을 갖는 열거형에는 primary, elementary, middle, high, college, university, graduate라는 항목이 있다. 각 항목은 그 자체가 고유의 값이며, 항목이 여러가지라서 나열하기 귀찮거나 어렵다면 한 줄에 모두 표현해줄 수도 있다.
enum School{
case primary, elementary, middle, high, college, university, graduate
}
(School 열거형 변수의 생성 및 값 변경)
var highestEducationLevel: School = School.university
// 위 코드와 정확히 같은 표현이다.
var highestEducationLevel: School = .university
// 같은 타입인 School 내부의 항목으로만 highestEducationLevel의 값을 변경해줄 수 있다.
highestEducationLevel = .graduate