열거형의 필요성
프로그램의 작성 도중 어떠한 특정한 숫자에 의미를 부여하는 일이 자주 생깁니다.
true 와 false 라는 논리형을 표현하기 위해 false 는 0, true 는 그 이외의 숫자라는 정의를 내렸습니다.
캐릭터가 동,서,남,북 방향으로 이동할 수 있는 바둑판 형태의 턴제 게임이 있습니다.
동서남북 이라는 논리적 개념을 컴퓨터가 이해하지 못 하므로, 특정한 숫자에 동서남북이라는 의미를 부여합니다.
C/C++에는 일련의 숫자에 의미를 부여하는 방법으로써 열거형이라는 것을 제공합니다.
열거형의 선언
#include <stdio.h>
enum Direction{
North,South,West,East
};
int main(int argc,char** argv)
{
Direction Dire;
Dire = East;
printf("Direction %d %d",South,Dire);
return 0;
}
enum (태그 이름){
열거자1,열거자2 ...
};
각각의 열거자들은 첫 번째 열거자부터 0으로 시작하는 값을 가지게 되며, 유일한 이름으로 사용됩니다.
열거자는 자신을 선언한 범위에 대해 영향력을 가집니다.
- 각각의 열거자에 사용한 이름을 해당하는 범위 내에서 변수명으로 정의할 수 없습니다.
위와 같은 경우는 전역 범위에 정의 하였으므로, 이 열거형은 이 main.cpp 파일 전체에 영향을 줍니다. 함수 안에서 정의하는것 역시 가능하며 이러한 경우는 해당 함수안에서만 영향을 끼칩니다.
열거형 변수 선언
태그 이름을 자료형으로 삼아, 열거자를 담는 변수를 만들어 낼 수 있습니다.
Direction Dire;
- C 에서는 enum Direction Dire;로 사용해야 합니다.
이렇게 만들어진 변수는 오직 해당 태그에 속하는 열거자만을 대입받을 수 있습니다.
만일 Dire 에 다른데이터를 대입하려고 시도하면 컴파일 에러를 발생하게 됩니다.
열거형에 수를 직접 지정하기
#include <stdio.h>
enum Direction{
North=5,South,West=1,East
};
int main(int argc,char** argv)
{
Direction Dire;
Dire = East;
printf("Direction %d %d",South,Dire);
return 0;
}
열거형을 선언할 때, 어떠한 명시도 없다면 자동으로 0부터 시작하는 값을 지정하게 됩니다.
- 위와 같이 직접 명시해 줄 수도 있습니다.
"열거자 = 값"의 형태를 사용하면 해당 열거자가 지정된 값을 가지도록 지정됩니다.
만약 열거자1에 5의 값을 할당하였다면 자동적으로 열거자2는 6의 값을 할당 받습니다.
위의 코드에서는 열거자3에서 다시 값을 바꾸어 1을 대입했고, 열거자4는 2를 할당 받습니다.
이러한 방식을 섞어서 사용하면 열거자는 어느 순간 중복된 값을 가지게 될 가능성이 있으며, 둘을 같은 의미로써 받아들이게 될 것입니다.
이는 의도적으로 같은 의미를 지니도록 만들어 졌을 수도 있고, 혹은 실수일 수도 있겠습니다. 컴파일러는 이를 오류로 체크하지 않습니다.
따라서 직접 수를 지정할때는 주의를 기울일 필요가 있습니다.