////
Search

enum, union 개념

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
복사

장점

동일 공간을 여러 해석으로 쓸 때, 메모리 절약 가능
하드웨어 레지스터나 통신 프로토콜에서 자주 사용