반응형
열거형 (Enumeration)
열거형은 여러 상수 값이 열거된 자료형으로 프로그래밍에서 가독성과 직관성을 높이기 위해서 사용합니다.
열거형은 사용자 정의 자료형으로 필요한 만큼 정의하여 사용할 수 있습니다.
예를 들어, "앞, 뒤, 왼쪽, 오른쪽"을 나타내는 방향을 저장하는 변수가 필요하다고 하면 정수, 실수, 문자 자료형을 이용하여 이를 표현할 방법을 마련해야 합니다.
int direction = 0;
// 0 : 전
// 1 : 후
// 2 : 좌
// 3 : 우
다음과 같이 정수 자료형을 이용하여 각 숫자에 의미를 부여하는 방법이 있지만 만약 프로그램이 더 복잡해지고 다른 사람이 이 코드를 본다면 한눈에 이해하기에는 어려움이 있을 것입니다.
enum Direction {
Front, Back, Left, Right
};
enum Direciton d = Front;
이런 문제점은 열거형을 통해 해결할 수 있습니다.
열거형 정의와 선언
enum 열거형_태그 {
상수_목록1, 상수_목록2, ...
};
// 상수_목록1 = 0
// 상수_목록2 = 1
// ...
열거형은 키워드 'enum'을 사용하여 열거할 상수 리스트와 함께 선언합니다.
열거형의 상수 목록들은 순서대로 0번부터 상수 값을 갖습니다.
enum 열거형_태그 {
상수_목록1, 상수_목록2 = 10, 상수_목록3, ...
};
// 상수_목록1 = 0
// 상수_목록2 = 10
// 상수_목록3 = 11
// ...
다음과 같이 사용자가 특정 상수 값을 지정할 수도 있습니다.
(다음 상수 값은 1씩 증가하여 할당됩니다.)
enum 열거형_태그 변수_이름;
또한 선언한 열거형을 사용할 때, 일반 변수들과 비슷하게 'enum + {지정한 열거형 태그 이름}'인 자료형 변수를 선언합니다.
'enum'과 '열거형_태그'는 한 묶음으로 반드시 붙여 사용합니다.
열거형의 재정의 (typedef)
enum 열거형_태그 {
// 상수_목록 ...
};
typedef enum 열거형_이름 재정의_이름;
재정의_이름 변수_이름;
일반적으로 열거형 변수를 선언할 때는 키워드 'enum'을 붙여 사용하지만 키워드 'typedef'를 사용하면 위와 같이 더 편리하게 열거형 변수를 선언할 수 있습니다. 또한 재정의한 이름으로 열거형 자료형을 사용할 수 있습니다.
typedef enum 열거형_태그 {
// 상수_목록 ...
} 재정의_이름;
재정의_이름 변수_이름;
또는 열거형의 선언과 동시에 재정의할 수 있습니다.
(이때 재정의된 이름으로 열거형 자료형이 존재하기 때문에, 선언시 열거형 태그는 지정하지 않아도 됩니다.)
typedef enum {
Red, Orange, Yellow, Green, Blue
} Color;
Color color = Red;
열거형 사용
enum 열거형_태그 변수_이름 = 상수_목록_이름;
enum 열거형_태그 변수_이름 = 상수;
열거형 변수에는 선언한 상수 목록을 대입해도 되고 지정된 상수를 직접 입력해도 됩니다.
열거형에 선언된 상수 목록은 일반적인 변수처럼 비교 연산하여 사용할 수 있습니다.
enum Color {
Red, Orange, Yellow, Green, Blue
};
enum Color myColor = Orange;
switch(myColor) {
case Red:
printf("My Color is Red");
break;
case Orange:
printf("My Color is Orange");
break;
case Yellow:
printf("My Color is Yellow");
break;
case Green:
printf("My Color is Green");
break;
case Blue:
printf("My Color is Blue");
break;
}
반응형