열거형(Enumerated Type)
enumerate (동사)
열거하다, 나열하다
- 정수형 상수의 집합
- 각 원소마다 고유의 이름을 가짐
- 집합 역시 고유의 이름을 가짐
- enum은 변수로 사용 가능
- 실수를 줄여준다.
열거형 정의(기본형)
- 정의는 함수 밖에서 함.
- 첫 번째 원소의 기본값은 0
- 아무 값도 대입해주지 않으면 원소의 값은 1씩 증가
enum EDirection
{
North,
South,
East,
West
}
열거형 정의(원소 값 직접 정의)
enum EDirection
{
North = 5,
South = 10,
East = 15,
West = East + 10
}
enum EDirection
{
North = 5,
South, // 6
East, // 7
West //8
}
// 메인 함수
EDirection direction;
- 각 원소에 원하는 값 대입 가능: 상수 혹은 계산식
- 부동소수점은 안됨.
- 대입 없이 변수를 정의만 하면 기본값으로 0이 들어감.
<열거형 이름><변수명> = <열거형 이름>.<열거형 원소>;
문제점
- 함수는 블랙박스 -> 내부 구현을 몰라도 쓸 수 있어야함.
- 함수 시그니쳐만 보고 direction에 어떤 값이 들어갈지 유추 불가
- 결국 함수 구현부를 봐야 함.
- 만약 누군가가 함수 바디를 안보고 시그니쳐만 보고 판단하면 잘못된 인자를 넘길 가능성이 있음.
enum을 쓰면 좋은점
- 코드가 읽기 좋아짐
- 다른 값이 들어가면 컴파일 오류 발생 -> 문제 발생 여지를 사전예방
- 함수 매개변수를 쓰이면 함수가 요구하는 인자형을 빨리 알 수 있음 -> 함수에 잘못된 값이 넘어가는 걸 예방
enum 꼼수 - 배열 만들기
enum EDirection
{
North,
South,
East,
West,
MAX,
};
// 어느 함수
string[] directions = new string[(int)EDirection.MAX];
for (int i = 0; i < directions.Length; ++i)
{
// 코드
}
코딩 표준
- 유사한 성질을 가진 정보들을 나열해야 할 때 정수형 상수보다는 enum을 사용할 것
- 열거형에서 char를 사용 할 수 있음(정수형이기 때문에)