프로그래밍 언어/[ C ]

[ C ] 07. 열거형

kim.svadoz 2020. 8. 13. 10:12
728x90
반응형

[ 열거형 ]


열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다. 만약 여러개 정수형 상수를 선언한다면 두세 개까지는 괜찮지만 개수가 많아지면 귀찮아 질 것이다. 열거형을 사용하면 정수형 상수를 좀 더 편하게 정의할 수 있다.

enum 열거형이름{
    value1 = 초깃값,
    value2,
    value3
};

열거형은 정의로만 사용이 안되고 변수로 선언해서 사용해야 한다.

enum 열거형이름 변수이름;
#include <stdio.h>

enum DayOfWeek{        // 열거형 정의
    Sunday = 0;        // 초깃값 할당
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

int main(){
    enum DayOfWeek week;        // 열거형 변수 선언
    week = Tuesday;            // 열거형 값 할당
    printf("%d\n", week);        // 2. Tuesday의 값 출력
    return 0;
}
# 실행 결과
2
  • 열거형의 값은 처음에만 할당해주면 그 아래에 오는 값들은 1씩 증가하면서 자동으로 할당된다. ( 아무 값도 할당하지 않으면 0부터 시작) 따라서 처음에 오는 Sunday에 0을 할당하면 Monday는 1, Tudesday는 2, ...
  • 문법으로 정해진 규칙은 아니지만 열거형 이름이나 값을 정의할 때 대문자만 사용하는 경우가 많다. 특히 단어와 단어 사이에는 _를 주로 사용한다. 사실 같은 C언어 코드라 하더라도 운영체제, 회사, 단체에 따라 스타일이 제각각이기때문에 해당 환경에서 사용하는 스타일에 맞춰주자.
  • 보통은 처음에 오는 값에만 초깃값을 할당하지만, 모든 값에 정수를 할당할 수 있다.
enum Value{
    ValueA = 1,
    ValueB = 3,
    ValueC = 7,
    ValueD = 11
};
  • 열거형도 typedef로 별칭을 지정하고 익명 열거형을 정의할 수 있다.
typedef enum _DayOfWeek{    // 열거형 이름은 _DayOfWeek
    Sunday = 0;
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
} DayOfWeek;        // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의
  • 익명 열거형도 가능하다. ( 구조체와 같은 방식~ )
  • 열거형을 정의하는 동시에 변수 선언
enum DayOfWeek{
    Sunday = 0;
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
} week;        // 열거형을 정의함과 동시에 변수 week 선언

열거형을 switch에 활용하기

열거형은 switch 분기문을 사용할 때 유용하다

switch(열거형 변수){
    case 열거형 값:
        실행할 코드;
        break;
}

예를들어 게임을 만든다고 할 때 캐릭터의 스킬을 열거명으로 정의할 수 있다.

#include <stdio.h>

enum LuxSkill{
    LightBinding = 1,
    PrismaticBarrier,
    LucentSingularity,
    FinalSpark
};

int main(){
    enum LuxSkill skill;    // 열거형 변수 선언
    skill = LightBinding;    // 열거형 값 할당

    switch(skill){
        case LightBinding:
            printf("LightBinding"\n);
            break;
        case PrismaticBarrier:
            printf("LightBinding"\n);
            break;
        case LightBinding:
            printf("LucentSingularity"\n);
            break;
        case LightBinding:
            printf("iInalSpark"\n);
            break;
        default:
            break;
    }
}

열거형을 for에 활용하기

열거형을 정의한 뒤 for문에 활용하는 방법도 있다. 예를 들어 프로그램에서 일요일부터 토요일까지 매일 반복되는 알람을 설정한다면 열거형과 반복문을 사용하면 편리하다.

#include <stdio.h>

typedef enum _DayOfWeek{
    Sunday = 0,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    DayOfWeekCount        // 열거형 값의 개수를 나타내는 항목 추가
} DayOfWeek;        // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의

int main(){
    // 초깃값은 Sunday, i가 DayOfWeekCount보다 작을 때까지만 반복
    for(DayOfWeek i = Sunday; i<DayOfWeekCount; i++){
        printf("%d\n", i);
    }
    return 0;
}
# 실행 결과
0
1
2
3
4
5
6
728x90
반응형