enum 타입이란?
#include <stdio.h>
enum Day {
Sunday,
Monday = 10,
Tuesday,
Wednesday,
Thursday = 20,
Friday,
Saturday
};
int main()
{
printf("Sunday : %d \n", Sunday);
printf("Monday : %d \n", Monday);
printf("Tuesday : %d \n", Tuesday);
printf("Thursday : %d \n", Thursday);
printf("Friday : %d \n", Friday);
}
- 초기값을 지정하지 않으면 첫번째 원소의 값 = 0
- 중간에 초기값을 별도로 설정할 수 있다.
(나머지 원소도 그에 맞춰 1씩 증가)
- 마지막 닫는 중괄호 「 } 」 뒤에 세미콜론을 붙여준다.
- enum은 컴파일 시점에 상수 값으로 바꾸기 때문에 성능 하락이 없다.
enum 타입을 왜 사용할까?
▶ 변수에 문자 형태로 값의 의미를 부여할 수 있다. → 가독성
ex) switch문 ▶ [C] 조건문 (Switch문 예제)
▶ 정수형 상수 집합으로 관리할 수 있다. → 효율성
const int Sunday = 0;
const int Monday = 1;
const int Tuesday = 2;
위와 같이 표현하는 것보다 "요일" 이라는 상수를 모아서 표현하는 것이 관리하기 편하다.
연관 있는 값들끼리 모아서 관리해준다.
리눅스 커널의 hdmi.h 헤더 파일에서 사용하는 형태
enum hdmi_content_type {
HDMI_CONTENT_TYPE_GRAPHICS,
HDMI_CONTENT_TYPE_PHOTO,
HDMI_CONTENT_TYPE_CINEMA,
HDMI_CONTENT_TYPE_GAME,
};
Naming Convention은 운영체제, 소속에 따라 제각각이다.
유지보수 차원에서도 생각해보자.
enum Type {GRAPHICS, PHOTO, CINEMA, GAME}; 가 존재한다.
다른 파트에서 해당 상수값을 이용해서 개발을 해야 하는 상황이라고 했을 때,
"0" 이 어떤 값을 가지는 것으로 서로 약속해서 사용하기 보다는
"GRAPHICS" 자체를 이용하는 것이 좋을 것이다.
만약에 "3D" 라는 Type이 추가되어서 "0" 의 값을 가지게 된다고 했을 때,
enum Type {3D, GRAPHICS, PHOTO, CINEMA, GAME};
"GRAPHICS" 값 자체는 "1"이 되었을지라도 사용하는 코드에서는 문제가 없다.
▶ enum에 초기값을 변경하지 않을 때,
마지막 원소는 enum 안에 있는 원소 개수가 됩니다.
#include <stdio.h>
enum Season
{
Spring, // 0
Summer, // 1
Autumn, // 2
Winter, // 3
SeasonCount // 4
};
int main()
{
for (int i = 0; i < SeasonCount; ++i)
{
// ...
}
}
이로써 정의된 enum 개수에 보다 쉽게 접근할 수 있다.
실무에서 많이 사용하는 형태는 typedef 키워드까지 같이 활용하는 것이다.
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C/C++] const 키워드 (1) | 2024.10.27 |
---|---|
[C/C++] [전처리기] #if (0) | 2024.07.23 |
[C/C++] #ifdef, #if defined() 비교 및 활용 (0) | 2022.09.01 |
[C 전처리기] #error 활용 예제 (0) | 2022.08.11 |
[C/C++] memmove() 함수 사용과 예제 (0) | 2021.11.28 |
댓글