enum (열거형, Enumeration)
의미 있는 이름으로 정수 상수를 나열하는 타입
특징
•
내부적으로 정수(int)로 저장
•
별도 값을 지정하지 않으면, 0부터 1씩 증가
•
가독성 향상 및 매직 넘버 제거에 도움이 됨
참고) 매직 넘버란?
코드 속에 갑자기 등장하는 의미를 알 수 없는 숫자(코드만 봐서는 해당 값이 왜 쓰였는지 알 수 없으며, 수정 시 실수를 유발하기 쉬운 하드코딩된 상수)
코드
#include <stdio.h>
// RED=0, GREEN=1, BLUE=2
enum Color { RED, GREEN, BLUE };
enum Color c = GREEN;
int main() {
printf("%d\n", c); // 1
return 0;
}
C
복사
// 이렇게 값을 직접 지정도 가능(0부터 1씩 증가하는게 아니라)
enum ErrorCode { OK = 200, NOT_FOUND = 404, SERVER_ERROR = 500 };
C
복사
장점
•
숫자 대신 이름 사용 → 코드 가독성 향상
•
값의 의미를 파악하기 좋음
union (공용체, Union)
모든 멤버가 같은 메모리 공간을 공유하는 타입
특징
•
모든 멤버의 시작 주소가 동일
•
가장 큰 멤버의 크기로 결정됨
•
한 순간에 하나의 멤버만 유효
코드
#include <stdio.h>
union Data {
int i;
float f;
char str[4];
};
int main() {
union Data d;
d.i = 65;
printf("i: %d\n", d.i); // 65
d.f = 3.14;
printf("f: %.2f\n", d.f); // 3.14
printf("i: %d\n", d.i); // 같은 메모리라 값 깨짐 가능
return 0;
}
C
복사
장점
•
동일 공간을 여러 해석으로 쓸 때, 메모리 절약 가능
•
하드웨어 레지스터나 통신 프로토콜에서 자주 사용
