출처 : 네이버 지식in
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=70600274&qb=ZW51bQ==&enc=utf8§ion=kin&rank=3&search_sort=0&spq=1&pid=RXPJbc5Y7tGssckXvJNsssssstG-506114&sid=Uue7GHJvLB4AAHbuDW8
re: enum에 대해서..(내공有)
쉽게 말해 enum 은 열거형 변수 입니다.
"어떻게" 생각하면 struct와 다르냐? 라고 물을 수 있지만.
"전혀" 다릅니다.
보통 enum은 상수를 정의하는데에 많이 쓰입니다.
소스의 가독성을 높인다거나 상수에 의미를 부여해서 쓸 수 있습니다.
전처리기인 #define 을 사용하거나, 전역 변수를 const로 선언해서 상수처럼 사용이 가능하지만
enum을 상수로 생각해서 처리할때의 이점이 있습니다. (뒷부분에 설명하겠습니다.)
우선 이넘(enum)을 선언하는 방법은 다음과 같습니다.
enum {mon, tue, wed, thr, fri, sat, sun } day;
여기서 day를 열거형 변수라 하고 그 하위의 항목(원소) 들 ( mon, tue, wed, thr, fri, sat, sun)로 구성됩니다.
특별하게 값을 지정하지 않는다면 enum의 각 원소들은 순차적인 "정수" 값을 갖게 됩니다.
이때 갖게되는 값은 mon부터 0, 1, 2 ... 6 까지 각 각 가지게 됩니다.
특별하게 값을 지정해서 enum을 사용한다면
enum {mon=100, tue, wed=200, thr, fri=300, sat, sun } day;
이렇게 선언을 하게 되면, mon은 당연히 100일거고,, tue는... 150일까요?
tue는 101을 갖게 됩니다.
enum의 값을 정하는 정의는 "이전 원소 값의 + 1" 입니다.
그럼. "왜 이넘을 사용해야 하는가.." 입니다.
사실 enum은 필요없을 지도 모릅니다.
#define 이 있고,
const int 가 있습니다.
하지만 C++ 이 enum에게 준 몇가지의 특별한 이유 때문에 enum을 사용합니다.
① 기억이 용이하다.
enum대신 정수형 변수를 대신 사용할 수 도 있습니다. 하지만, 이렇게 될때 각 정수의 의미가 무엇인지를 만드는 사람이 기억하고 있어야 하죠. 값이 많아질 수록 혼란스러울겁니다. 보통, 사람은 숫자보다 문자를 더 잘 기억합니다. 그리고, enum의 원소들을에게 의미를 부여한 이름을 준다면 더 기억하기가 쉽겠죠..
② 소스의 가독성(Readability)이 높아진다.
enum의 원소만 봄으로써, 그 상수의 의미를 보다 쉽게 파악 할 수 있고, 소스 전체의 가독성을 높이는데 도움이 됩니다. 예를 들어 whatdays = 0; 이라고 표현한다면, 이게 월요일인지,, 일요일인지, 도무지 알 길이 없습니다. 하지만 whatdays = mon; 이라고 한다면, 두말할나위없이 이해할 수 있겠죠. 두명이상의 Project나 팀단위 작업을 할때에는 알고리즘을 아무리 잘 짜도 소스가 X같으면, 프로젝트 진행이 어려워집니다. 따라서 이런 팀단위 작업에는 가독성이 아주 중요시 됩니다.
③ 안전하다.
앞서 예를든 days에 대입될수 있는 값은 7개중 하나로 제한이 되기때문에 사용자의 실수를 컴파일러가 미리 예방해줄 수 있습니다. 따라서 변수형을 사용하는것보다 안전하죠.
필수는 아니지만 있으면 좋다. 이게 이넘(emum)입니다.
enum을 보다 효율적으로 사용하는 방법은
typedef를 사용하는겁니다.
바로 예부터 보자면...
typedef enum CDays {enum {mon, tue, wed, thr, fri, sat, sun };
이제 CDays는 하나의 타입으로 생성된겁니다.
CDays WhatDay(); 와 같이 오늘이 몇요일인지 리턴하는 함수를 작성 할 수도 있구요.
CDays Day = WhatDay();
와 같이 Enum을 효과적으로 처리할 변수를 만들어 사용할 수 있습니다.
'Engineering > C Language' 카테고리의 다른 글
[C++] 구조체와 클래스 (0) | 2014.02.24 |
---|---|
[C언어] 메모리구조와 동적할당 (0) | 2014.02.21 |
[C언어] 구조체사용하기 (0) | 2014.01.16 |
[C언어] 포인터 사용하기-2 (0) | 2014.01.15 |
[C언어] 포인터 사용하기-1 (0) | 2013.11.30 |