본문 바로가기
개발이야기

1분코딩강좌 #09 enum과 switch문

by 코저씨 2021. 5. 23.
728x90

안녕하세요 코저씨입니다.

오늘은 동영상을 만들기 전에 내용부터 정리할 겸 글부터 올려봅니다.

설명드릴 것은 흔히 C언어를 배우면서 그냥 알고만 넘어가는 enum, 열거형에 대해 알아보겠습니다.

열거형 enum

열거형은 쉽게 말하면 상수에 이름을 지정해주고, 자동으로 이름에 들어가는 값을 계산하여 순차적으로 넣어주는 문법입니다.

1
2
3
4
5
6
7
enum{
    ENUM_STATE_IDLE=0,
    ENUM_STATE_START,
    ENUM_STATE_STOP
};
 
int iValue = ENUM_STATE_START;
cs

위 내용은 ENUM_STATE_IDLE을 0으로 초기화하면서 ENUM_STATE_START에는 1을, ENUM_STATE_STOP에는 2를 넣습니다. iValue에는 ENUM_STATE_START 값, 1을 넣습니다.

흔히 enum 열거형을 실습만 하고 잊고 사는데 사실 열거형은 프로그램 가독성을 올리는데 상당한 기여를 합니다.
보통 개발자들이 어떤 조건에 의해 프로그램이 구동하는 설계를 만들 때 아래와 같이 만들고는 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
do{
    if(flag == 0)
    {
        //work
        flag = 1;
    }else if(flag == 1)
    {
        //work2
        flag == 2;
    }else if(flag == 2)
    
 
cs

flag가 0이면 어떤 작업을 하고 flag를 1로 바꾸고, flag가 1이면 어떤 작업을 하고 반복...

하지만 flag의 0과 1,2가 어떤 상태인지 개발자만 알고 또 그 개발자도 몇 주 뒤에는 주석이 없으면 어떤 값인지 잊어버립니다.

여기서 enum으로 지정한 이름 형태의 상수를 사용하면 어떨까요?

1
2
3
4
5
6
7
8
9
10
11
do{
    if(flag == ENUM_STATE_ILDE)
    {
        //work
        flag = ENUM_STATE_START;
    }else if(flag == ENUM_STATE_START)
    {
        //work2
        flag == ENUM_STATE_STOP;
    }else if(flag == ENUM_STATE_STOP)
 
cs

적어도 flag가 ilde인 경우 START를 하고, flag가 START인 경우 STOP을 하는 것이 눈에 확 들어오게 됩니다.

switch문

switch문은 if문 다음으로 많이 사용되는 조건문입니다.
if문은 조건이 많아질수록 매번 if, elseif, else를 체크해서 느려지는 구조이지만
switch문은 조건을 1회만 검사하고 바로 해당 조건으로 이동하기에 빠른 구조로 되어 있습니다.
(하지만 조건이 범위 값 (i > 0 && i <99 같은)인 경우 제외)

1
2
3
4
5
6
7
switch(flag)
{
    case 0:
        break;
 
    case 1:
        break;
cs

위와 같은 개발한 사람만 아는 switch문에 enum을 적용하면 가독성이 증가되고 다른 개발자에게도 문법 이해를 빠르게 시켜주게 됩니다. 이는 고급 개발자가 되는 한걸음 중 하나입니다.

제가 최근에 개발한 펌웨어 소스 중 일부입니다.
적어도 RadioFlag가 SETUPMODE일 때는 시간 값을 60마다 초기화를, RX_READY(수신대기)나 그 외의 상태에서는
Rx관련 작업을 하는 것 등이 눈에 보입니다.

만약 그냥 상수값이였으면 소스를 처음부터 다 읽어야만 이해가 가능해집니다.

enum문의 단점

enum문의 단점은 하나뿐입니다. 바로 이름을 짓는 창작의 고통이 그것입니다.

정리

enum 열거형은 초보 개발자에서 고급 개발자로 가는 한걸음 중 하나입니다.
반드시 익숙해지시기 바랍니다.

감사합니다.




728x90