일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- 암호수학
- c언어
- 백준
- 재귀
- level13
- LoB
- windosws wbcs
- 파일 시스템
- ftz
- windosw 문자열
- PHP
- 미로 탐색 알고리즘
- 두근두근 자료구조
- 정렬 알고리즘
- pwnable.kr
- OSI
- Stack
- 자료구조
- 큐
- web
- System
- War Game
- ftz level13
- Java
- 스택
- HTML
- SWiFT
- 시간복잡도
- C
- Today
- Total
나의 기록, 현진록
[Swift] 4.5 열거형 / 원시 값 본문
스위프트 프로그래밍 3판 - 야곰 지음
열거형
열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입입니다. 열거형은 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가합니다. 그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있습니다.
열거형은 다음 같은 경우에 요긴하게 사용할 수 있습니다.
- 제한된 선택지를 주고 싶을 때
- 정해진 값 외에는 입력 받고 싶지 않을 때
- 예상된 입력 값이 한정되어 있을 때
열거형으로 묶을 수 있는 항목들은 주변 생활에서 많이 찾아볼 수 있습니다.
- 무선통식 방식 : WiFi, 블루투스, LTE 등
- 학생 : 초등학생, 중학생, 고등학생 등
- 지역 : 강원도, 경기도, 경상도, 전라도 등
다른 프로그래밍 언어를 사용해봤다면 조금 의아할 수 있겠지만, 스위프트의 열거형은 항목별로 값을 가질 수도, 안 가질 수도 있습니다. 예를 들어 C 언어는 열거형의 각 항목 값이 정수 타입으로 기본 지정되지만, 스위프트의 열거형은 각 항목이 그 자체로 고유의 값이 될 수 있습니다.
기존의 C 언어 등에서 열거형은 주로 정수 타입 값의 별칭 형태로 사용이 될 뿐이었습니다. 그렇기 때문에 모든 열거형의 데이터 타입은 같은 타입(주로 정수 타입)으로 취급합니다. 이는 열거형 각각이 고유의 타입으로 인식될 수 없다는 문제 때문에 여러 열거형을 사용할 때 프로그래머의 실수로 인한 버그가 생길 수도 있었습니다. 그러나 스위프트의 열거형은 각 열거형이 고유의 타입으로 인정되기 때문에 실수로 버그가 일어날 가능성을 원천 봉쇄할 수 있습니다.
물론 열거형 각 항목이 원시 값이라는 형태로 (정수, 실수, 문자 타입 등의) 실제 값을 가질 수도 있습니다. 또는 연관 값을 사용하여 다른 언어에서 공용체라고 불리는 값의 묶음도 구현할 수 있습니다. 열거형은 switch 구문과 만났을 때 멋지게 활용할 수 있습니다.
4.5.1 기본 열거형
enum School{
case primary //유치원
case elementary //초등
case middle //중등
case high //고등
case college //대학
case university //대학교
case graduate //대학원
}
한 줄로도 작성이 가능하다.
enum School{
case primary, case elementary, case middle, case high, case college, case university, case graduate
}
열거형 변수를 생성하고 값을 할당했다.
var highestEduactionLevel: School = School.university
//위 코드와 같은 표현이다.
var highestEduactionLevel: School = .university
//같은 타입인 School 내부의 항목으로만 highestEduactionLevel의 값을 변경할 수 있다.
highestEduactionLevel = .graduate
4.5.2 원시 값
열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시 값도 가질 수 있다. 즉 특정 타입으로 지정된 값을 가질 수 있다는 뜻이다. 열거형 이름 오른쪽에 타입을 명시해주면 된다. 원시 값을 사용하고 싶다면 rawValue라는 프로퍼티를 통해 가져올 수 있다.
enum School: String{
case primary="유치원"
case elementary = "초등학교"
case middle = "중등학교"
case high = "고등학교"
case college = "대학"
case university = "대학교"
case graduate = "대학원"
}
let highestEduactionLevel: School = School.university
print("저의 최종학력은 \(highestEduactionLevel.rawValue) 졸업입니다.")
// 저의 최종학력은 대학교 졸업입니다.
enum WeekDay: Character{
case mon = "월"
case tue = "화"
case wed = "수"
case thu = "목"
case fri = "금"
case sat = "토"
case sun = "일"
}
let today: WeekDay = WeekDay.fri
print("오늘은 \(today.rawValue)요일입니다.")
//오늘은 금요일입니다.
일부만 원시 값을 주고 싶다면 이 또한 가능하다.
enum School: String{
case primary="유치원"
case elementary = "초등학교"
case middle = "중등학교"
case high = "고등학교"
case college
case university
case graduate
}
let highestEduactionLevel: School = School.university
print("저의 최종학력은 \(highestEduactionLevel.rawValue) 졸업입니다.")
// 저의 최종학력은 universtiy 졸업입니다.
enum Number: Int{
case zero
case one
case tow
case ten = 10
}
print("\(Number.zero.rawValue), \(Number.one.rawValue), \(Number.tow.rawValue), \(Number.ten.rawValue)")
// 0, 1, 2, 10
정수타입일 경우 0부터 1씩 증가한 값을 가진다.
'Programming > Swift' 카테고리의 다른 글
[Swift] 4.5.5 순환 열거형 (0) | 2021.07.02 |
---|---|
[Swift] 4.5.3 연관 값 / 4.5.4 항목 순회 (0) | 2021.07.02 |
[Swift] 1.2.2 함수형 / 함수형 프로그래밍 패러다임 (0) | 2021.07.01 |
[Swift] 1.2.1 객체지향 / 객체지향 프로그래밍 패러다임 (0) | 2021.06.29 |
[Swift] 2.1 기본 명명 규칙 (0) | 2021.06.29 |