본문 바로가기
프로그래밍 언어/C 언어

[C/C++] 열거형 타입 enum 이란?

by 까망 하르방 2024. 6. 6.
반응형

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은 운영체제, 소속에 따라 제각각이다.

▶ 네이밍 컨벤션 (Naming Convention) 

 

네이밍 컨벤션 (Naming Convention)

Naming Convention은 언어마다 권장하는 것과 팀 내부에서 사용하는 방법이 다를 수 있다. 하지만 하나의 프로젝트에서 여러 Case가 섞이면 가독성이 떨어지기 때문에 최대한 정해진 Rule을 준수할 필

zoosso.tistory.com


유지보수 차원에서도 생각해보자.

enum Type {GRAPHICSPHOTOCINEMAGAME}; 가 존재한다.

 

다른 파트에서 해당 상수값을 이용해서 개발을 해야 하는 상황이라고 했을 때,

"0" 이 어떤 값을 가지는 것으로 서로 약속해서 사용하기 보다는

"GRAPHICS" 자체를 이용하는 것이 좋을 것이다.

 

만약에 "3D" 라는 Type이 추가되어서 "0" 의 값을 가지게 된다고 했을 때,

enum Type {3D, GRAPHICSPHOTOCINEMAGAME};

"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] typedef enum 활용  

 

[C] typedef enum 활용

[C] 열거형 타입 enum 이란?을 먼저 읽고 오시는 것을 권장 드립니다. enum 타입은 typedef 키워드와 주로 함께 사용된다. typedef는 타입의 별칭을 생성하고 실제 타입 이름 대신 별칭을 사용할 수 있게

zoosso.tistory.com

반응형

댓글