enum 을 사용하자 - 2009/02/09 16:25

필자는 임베디드 시스템 소프트웨어를
작성 할 시 열거형 데이터(enum)를 애용한다. 자 그럼 이제 enum 이 가지는 장점을 한번 열거(^^)해 보기로 한다.
 
첫째, 직관적이다
아래와 같은 디파인 선언보다는
#define BLACK 0
#define GREEN  1
#define CYAN   2
#define RED     3
. . .
 
enum COLORS{ BLACK, BLUE, GREEN, CYAN . . . }
이와 같은 선언이 언뜻 보기에도 간결함을 볼 수 있다.
 
다음과 같이 자료의 수정 관리에도 유용하다
enum COLORS{ BLACK, BLUE, GREEN, CYAN, MAX_COLOR}; <----- 이런식으로 작성해 놓았다가 추후 멤버를 하나 추가할 경우
enum COLORS{ BLACK, BLUE, GREEN, CYAN, RED, MAX_COLOR}; <----- 얼마나 간단한가
 
 
둘째, 경계치 검사에 유용하다
예제를 하나 보자

 
enum COLORS{ BLACK, BLUE, GREEN, CYAN, RED, MAX_COLOR};
int func(int paint)
{
 // 예외처리
 if(MAX_COLOR <= paint)
  return (-STATUS_InvalidParam); // error
. . .
}

 
 
코드의 시작부에서 전달인자(parameter) 유효성을 검사할때 사용될 수 있다.
디파인(#define) 으로도 위와 동일한 기능을 구현할 수는 있지만 그 편리성 만큼을 따라 오지는 못한다.
 
 
셋째, 디버거의 지원
첫째, 둘째 특징은 이미 일반적으로 알고 계신 내용이리라 믿는다. 이에 마지막 특징은 특수한 상황에서 보다 효율적이고 강력한 방법을 제공한다.
임베디드 시스템 개발용 장비. 이를테면 MDS을 포함한 ICE(In-circuit emulator) 외 온갖 IDE 디버거 장비&소프트웨어 툴들은 WATCH 라는 이름으로 변수의 현재 값을 모니터링 할 수 있는 기능을 대부분 지원하고 있다.
이 장비들은 거의 모두 다 디파인으로 선언된 변수들에 대해서 WATCH 뷰파인더에서 해당 변수의 실제 그 값을 상수 '숫자' 로만 보여준다. 이때 enum 으로 선언된 변수는 좀 상황이 다르다.
 
다음의 예를 보면 이해가 훨씬 빠를것이다.
 
 ARM 개발툴 ADS(Arm Developer Suite)의 디버거인 AXD 모습이다.
 
 
 
예제로 사용된 코드이다.

#include <stdio.h>

typedef enum {
 BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
 LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN,
 LIGHTCYAN,LIGHTRED, LIGHTMAGENTA, YELLOW,
 WHITE
}COLORS;

 
int main(void)
{
 COLORS paintbrush1;
 int paintbrush2;
 
 paintbrush1 = WHITE;
 printf("Dosen, What's your favorite colors for your painting?\n");
 printf("Ya, My favorite painting color is %d\n", paintbrush1);

 paintbrush2 = CYAN;
 printf("James, and you?\n");
 printf("Ya, My favorite color is %d\n", paintbrush2);

 return 0;
}

 

디버거 툴은 현재의 데이타 값(paintbrush1 = 'WHITE')을 보여주고 있다.

 
 
반면, int형으로 선언된 변수는 현재의 데이타 값(paintbrush2 = 0x00000003)을 숫자로 보여주고 있음을 알 수 있다.(참고. 0x00000003 은 CYAN에 해당함)

 

즉, 열거형으로 선언된 변수는 그 값이 '숫자'가 아닌 그 명칭(예, WHITE)으로 직접 디버거 상에 표현되므로 보다
직관적인 편리함을 가져다 준다고 할 수 있다.
 
넷째, 호환성문제(단점)
위의 세가지 장점에 더하여 다음과 같은 단점도 존재한다. 상시 이점을 유념하여 사용시에는 세심히 살펴야 하겠다.
enum 자료형은 컴파일러에 따라 상이한 크기를 만들어낸다. enum의 실제 크기가 1byte 혹은 4byte의 크기를 가질수 있다.
따라서, API 구조체나 전달인자로 enum 이 사용된다면 서로 상이한 컴파일러로 생산된 라이브러리나 오브젝트끼리는
서로 호환성을 가질수 없게 될 수도 있다..
 
지금까지 열거형데이타의 특징들을 살펴 보았다.
 
-홍익컴닷컴-
http://www.hongikcom.com

♡ 포스팅이 유익 하셨다면 E-mail로 가일의 임베디드 스쿨을 구독하세요->

Trackback Address :: http://www.hongikcom.com/trackback/4 관련글 쓰기
Name
Password
Homepage
Secret
< PREV |  1  |  ...  125  |  126  |  127  |  128  |  129  |  130  |  131  |  NEXT >