- enum 이란?
enum(enumeration)은 열거된 상수를 별명으로 치환하여 사용하는 나열형이다.
상수 1을 ONE이라는 별명을 지어준뒤, ONE을 부르면 1의 값을 사용 할 수 있다.
- enum의 기본적인 형태
우선 enum을 정의해 줘야한다. enum키워드를 사용해 enum의 이름을 e라고 지정해주고
{ }; 안에 ZERO, ONE, TWO, THREE라는 별명을 적어주면 enum을 정의 할 수 있다.
별명에 초기값이 없을 경우에는 0부터 시작하여 아래로 + 1 씩 더한 값이 지정된다.
따라서 ONE, TOW, THREE, FOUR에 순서대로 0,1,2,3 상수가 알아서 지정된다.
보통 별명은 대문자로 많이 사용한다. 하지만 회사마다 다를 수 도 있다.
enum e //이넘 정의
{
ZERO, //0
ONE, //1
TWO, //2
THREE //3
};
정의한 enum을 사용하기 위해선 enum을 선언 해줘야 한다.
enum을 선언 할 때는 enum키워드 정의한 enum 변수명; 순서대로 작성해준다.
e는 정의한 enum이고 num이 enum의 변수가된다.
enum e num;
enum 변수를 사용 할 때는 enum에서 정의한 값 들 중 하나만 가질 수 있게 된다.
num 변수는 ZERO, ONE, TWO, THREE 중 하나의 값만 할당 된다는 거다.
num = ZERO;
num = ONE;
위에서 설명한 내용의 전체 코드다.
num 변수를 이용해 상수를 출력하는 예제다.
#include <stdio.h>
enum e //enum 정의
{
ZERO,
ONE,
TWO,
THREE
};
int main()
{
enum e num; //enum 변수 선언
num = ZERO; //enum 변수에 상수 넣기
printf("%d\n", num); // 0
num = ONE;
printf("%d\n", num); // 1
}
결과
0
1
- enum 정의 초기값 세팅
enum을 정의 할때 초기값을 세팅 할 수 있다.RED = 3 이기 때문에 위에서 아래로 + 1 씩 3,4,5,6로 지정된다.
enum e
{
RED = 3, //3
BLUE, //4
GREEN, //5
YELLOW //6
};
enum을 정의 할때 모든 값을 지정 할 수 있다.
enum e
{
RED = 3, //3
BLUE = 4, //4
GREEN = 5, //5
YELLOW = 6 //6
};
enum을 정의 할때 원하는 값만 지정 할 수 있다.
이때는 지정 한 값이 나올 때 마다 그 기준으로 + 1씩 된다.
enum e
{
RED = 3, //3
BLUE, //4
GREEN = 8, //8
YELLOW //9
};
- typedef 사용하기
- typedef : 다른 자료형의 별명을 만들기 위한 예약어
typedef과 함께 enum을 정의하면 코드를 줄일 수 있다.
enum을 정의 할 때 첫째줄에 다가 typedef 예약어를 enum e 앞에 붙여주면 된다.
마지막 줄에 color_e라는 enum의 별명을 지어준다.
typedef enum e //e는 enum의 이름
{
RED,
BLUE,
GREEN,
YELLOW
}color_e; //enum의 별명
기존 enum 선언 방식 대신에 enum의 별명을 이용해 enum을 선언 할 수 있게된다.
기존 enum 선언 방식을 사용해도 문제없이 선언된다.
color_e num; //color_e(별명)으로 선언
typedef을 사용한 코드의 전체 예제다.
대부분 enum과 typedef를 함께 사용하기 때문에 typedef의 사용을 권장한다.
#include <stdio.h>
typedef enum e //e는 enum의 이름
{
RED,
BLUE,
GREEN,
YELLOW
}color_e; //enum의 별명
int main()
{
color_e num; //별명으로 enum 선언
num = RED;
printf("%d\n", num);
}
- enum의 메모리 크기에 대해서
우선 enum을 정의하는 부분에선 메모리가 할당 되지 않는다.
enum e //enum 정의, 메모리 할당 안됨
{
ZERO,
ONE,
TWO,
THREE
};
enum을 선언하는 부분에서 메모리가 할당 된다.
enum e num; //enum 변수 선언, 메모리 할당
enum의 크기를 알아내려면 sizeof 함수를 사용하면 된다.
결과를 보면 num의 변수는 4byte를 차지 하는 것을 알 수 있다.
enum의 값은 정수형을 별명으로 치환하기 때문에 int와 같은 크기이기 때문이다.
- sizeof 함수 : 변수의 크기를 알아내는 함수, byte로 반환
enum e num; //enum 변수 선언, 메모리 할당
printf("%d byte \n", sizeof(num)); // 4byte
결과
4 byte
위에서 설명한 내용의 전체 코드다.
#include <stdio.h>
enum e //enum 정의, 메모리 할당 안됨
{
ZERO,
ONE,
TWO,
THREE
};
int main()
{
enum e num; //enum 변수 선언, 메모리 할당
printf("%d byte \n", sizeof(num)); // 4byte
}
그런데 위에서 설명한 내용은 반만 맞고 반은 틀리다.
왜냐하면 컴파일러가 컴파일 과정에서 enum의 크기를 결정하기 때문이다.
예를 들어 ZERO에 4byte이상의 값을 넣으면 8btye 크기로 증가되는 모습을 볼 수 있다.
따라서 enum의 크기는 최소 4byte이며 지정된 값에 따라 크기는 변동된다고 이해하면 될 듯한다.
#include <stdio.h>
enum e //enum 정의, 메모리 할당 안됨
{
ZERO = 0x100000000000L,
ONE,
TWO,
THREE
};
int main()
{
enum e num; //enum 변수 선언, 메모리 할당
num = ZERO;
printf("%d byte \n", sizeof(num)); // 8byte
}
결과
8 byte
출처 : https://www.morenice.kr/113
- enum을 사용하는 이유
상수는 변하지 않는 수다. PI 처럼 말이다. (3.141952)
따라서 한번 선언하면 수정 할 일이 없다.
하지만 많은 상수들을 사용하게 될때 숫자로 되어있으면 의도를 파악하기 어렵다.
이때 enum을 사용해 상수들을 묶어 별명을 지어주면 코드의 의도를 파악하기 쉬워진다.
'C 언어' 카테고리의 다른 글
[c언어 강좌] 6. 입출력 함수 (0) | 2024.10.21 |
---|---|
[C언어 강좌] 4. 변수와 자료형 (0) | 2024.08.14 |
[C언어 강좌] 3. main 함수란 (0) | 2024.08.11 |
[C언어 강좌] 2. visual studio 설치 및 프로젝트 생성 (0) | 2024.08.10 |
[C언어 강좌] 1. C언어 란? (0) | 2024.08.10 |