열거형을 설명하자면 다음과 같이 이야기 할 수 있을 것 같습니다.
같은 주제로 연관된 데이터들을 구성하여 나타내는 자료형.
여기까지 들으면 무슨말인가 이해가 어려워서 혼자서 열심히 비유를 해보았습니다.
어렸을 적 했던 RPG 게임을 떠올려보면 다양한 직업이 있습니다. 그리고 모든 유저는 직업을 선택하게 됩니다.
이때 100만명의 유저에게 직업을 직접 할당해서 지정해줘야 한다면 어떨까요?
// 일부러 오타를 만들었습니다.
var user11: String = "brontend"
var user2: String = "fronend"
var user3: String = "bockEnd"
따라서 이와 같이 공통된 주제를 갖고 있다면
이미 지정해놓은 값만 선택해서 받고 싶을 때 사용하는 것을 열거형이라고 합니다.
(주관적인) 열거형 사용 예시
- 알피지 게임의 직업 (전사, 법사, 궁수, 도적 등등)
- 다양한 나라 (한국, 중국, 일본, 미국, 태국 등)
- it의 다양한 분야
열거형을 사용하면 앞서 말씀드린 것 처럼, 코드가 눈에 확 들어와 가독성이 좋아지고, 오타를 만들어낼 확률이 감소할 수 있습니다.
열거형의 특징
- 프로그래머가 정의해둔 항목 값 외에는 추가/수정 불가
- 제한된 선택지를 주고 싶을 때
- 정해진 값 외에는 입력받고 싶지 않을 때
- 예상된 입력 값이 한정되어 있을 때
원시값이 없는 열거형이란, 열거형 이름만 쓰고 case를 통해 선언만해둔 상태를 말합니다.
enum School {
case primary, elementary, middle, high, college, university
}
이렇게 한 줄로 선언할 수 있고,
enum Family {
case mother
case father
case brother
case sister
}
여러줄로 선언할 수도 있습니다. 이렇게 까지 선언한 것을 원시값이 없는 열거형을 선언했다고 합니다.
우리가 선언한 열거형을 typealias과 비슷한 개념으로, 하나의 자료형처럼 사용할 수 있습니다.
또한 열거형으로 타입이 지정된 경우 .(점 표기법)을 통해 case에 접근할 수 있습니다.
// 1번 접근 방법
var myFamily: Family = Family.brother
// 2번 접근 방법
var myFamily: Family = .brother
저는 1번이 더 직관적이라 1번을 사용하려고 합니다. (넵. 안물어봤습니다.)
지금까지 사용했던 열거형은 case를 지정할 때 아무런 값도 대입하지 않았습니다.
이 case에 원시 값을 지정할 수 있는데 -> 이것을 Raw Value라고 합니다.
Raw Value가 될 수 있는 자료형에는 총 3가지가 있습니다. (Number Type, Characher, String) type
위와 같은 원시 값을 가지려면 꼭 enum 선언 시 이름 옆에 type을 명시해야 합니다.
enum School: String {
case primary, elementary, middle, high, college, university, graduate
}
enum List: Int {
case one // 0
case two = 2
case three // 1
case four // 2
}
enum TestEnum: Character {
case A = "한"
case B = "국"
}
enum MyTeamMember: String {
case firstMember = "HoonJong"
case secondMember // "secondMember"
case Team // "Team"
}
다음은 연관 값을 가지는 열거형이라는 내용으로 좀 더 심화된 내용을 공부해보고자 한다!
덕분에 많이 배웠습니댱!