나의 IT일지
열거형 본문
우리는 코딩을 하면서 여러 데이터를 접하고, 사용하며, 변형하고, 출력한다. 특히 정수형, 실수형 데이터를 자주사용하게 되며, 이러한 정수형, 실수형 데이터를 문자로 변형해서 사용하는 경우가 있는데, 이때, 사용하는 방법이 열거형이다.
열거형
열거형이란 변수가 가질 수 있는 데이터의 값들을 선언하여 사용하는 것으로, 변수에 저장할 수 있는 정수 값을 기호로 정의하여 나열하는 자료형이다.
이러한 열거형은 변수에 상수나 수식을 저장한 뒤, 변하지 않는 값으로 만드는 심볼릭 상수(#define)와 많이 유사한 것을 볼 수 있다.
enum 열거형명 {기호1, 기호2, 기호3..};
enum{기호1 = 값1, 기호2=값2, 기호3=값3....}
위의 구조는 열거형을 선언하는 방식으로, 기호에 매칭되는 값을 0부터 시작해서 부여한다는 것(첫번째 방식)과 직접 부여한다는 것(두번째 방식)이 있다.
- 열거형으로 선언된 변수는 기호상수만 사용가능
- 가독성을 위해 사용하는 것으로 상수만 사용가능
- 변수와의 구분을 위해 이름은 대문자로 지정
이때 기호상수란 상수를 기호로 나타내는 것으로, 열거형 변수명을 만들지 않고 여러개의 기호상수를 나타낼 수 있으며,
열거형을 통해 만든 변수는 해당 기호들을 값과 매칭하여 저장하게 된다.
#include<stdio.h>
enum a{A=1,B=2,C=3,D=4};
void main() {
printf("A:%d\n", A);
printf("B:%d\n", B);
printf("C:%d\n", C);
printf("D:%d\n", D);
enum a a1;
a1 = A;
printf("a1:%d\n", a1);
}
위의 결과를 보면, 변수를 생성하지 않아도 기호상수를 사용할 수 있다는 것을 알 수 있다. 즉, 열거형을 통해 "A=1", "B=2", "C=3", "D=4"로 정의한 것이다.
그리고 변수를 생성하는 방법은 구조체와 같이 "enum 열거형명 변수명"이며, 해당 변수는 값을 대입해서 사용해야 한다. 즉 변수는 멤버(기호)중에 어느 것을 사용할 것인지 선택을 해야한다는 것이다.
이러한 열거형은 조건문에서 많이 사용되는데, 다음코드들을 한 번 보도록 하자
#include<stdio.h>
enum{ TRUE = 0, FALSE = 1};
void main() {
int TF;
printf("동의시 0,거절시 1\n");
printf("입력:");
scanf("%d", &TF);
if (TF == TRUE) {
printf("동의하셨습니다.");
}
else if (TF == FALSE) {
printf("동의하지 않으셨습니다.");
}
else {
printf("잘못입력하셨습니다.");
}
}
#include<stdio.h>
enum COMPUTER{MONITER,RAM,HDD,DVD}; //MONITER=0,RAM=1,HDD=2,DVD=3
void parts(int);
void main() {
int code;
printf("코드입력(0~3):");
scanf("%d", &code);
parts(code);
}
void parts(int code) {
enum COMPUTER com1;
com1 = code;
switch (com1) {
case MONITER:
printf("COMPUTER-모니터\n");
printf("단위: inch\n");
printf("기타:해상도, 주파수 등을 고려할 것");
break;
case RAM:
printf("RAM-메모리 카드\n");
printf("단위: MB\n");
printf("기타:DDR RAM의 속도를 고려할 것");
break;
case HDD:
printf("HDD-하드디스크\n");
printf("단위: TB\n");
printf("기타:속도를 나타내는 RPM을 확인할 것");
break;
case DVD:
printf("DVD-CD ROM\n");
printf("단위는 배속\n");
printf("종류: DVD R/W, DVD R");
break;
default:
printf("input error");
}
}
해당 코드를 보면, 조건문의 조건이 상수가 아닌 기호로 사용되어 있는것을 알 수 있다. 이는 코드의 가독성을 높아진 것을 볼 수 있다.