C 열거형(Enum) 마스터하기: 정의, 선언, 플래그 연산
C 열거형(Enum)
C에서 열거형(enum)을 정의, 선언, 활용하는 방법을 실전 예제, 플래그 기법, 크기 인사이트와 함께 탐구합니다.
C에서 열거형(enum)은 명명된 정수 상수 집합을 그룹화하는 타입으로, 의도를 명확히 하고 컴파일 타임 타입 안전성을 제공합니다.
enum flag {const1, const2, ..., constN};
기본적으로 const1은 0, const2는 1, ... 순으로 값이 할당됩니다. 선언 시 값을 재정의할 수도 있습니다.
// enum 상수 커스터마이징
enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3,
};
열거형 타입 선언
enum을 정의하면 변수에 사용할 새 타입이 생성됩니다. 선언과 인스턴스화 방법:
enum boolean {false, true};
enum boolean check; // 변수 선언
변수 check는 이제 enum boolean 타입이며, 값은 false = 0, true = 1에 매핑됩니다.
enum boolean {false, true} check;
예제: 요일 열거형
#include <stdio.h>
enum week {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
int main() {
enum week today = Wednesday;
printf("Day %d", today + 1);
return 0;
}
출력
Day 4
왜 열거형을 사용하는가?
Enum 변수는 단일 명명된 값을 가지므로 코드가 자기 문서화됩니다. 또한 기본적으로 int와 같은 저장소를 차지하며, 대부분 플랫폼에서 4바이트입니다.
#include <stdio.h>
enum suit {club = 0, diamonds = 10, hearts = 20, spades = 3} card;
int main() {
card = club;
printf("Size of enum variable = %d bytes", sizeof(card));
return 0;
}
출력
Size of enum variable = 4 bytes
이 크기는 기본 int 타입과 일치하지만, 컴파일러와 아키텍처에 따라 정확한 크기는 달라질 수 있습니다.
플래그로 열거형 사용하기
각 상수가 서로 다른 2의 거듭제곱이 되도록 열거형을 정의하면 플래그 표현에 탁월합니다. 비트 OR로 결합하고 비트 AND로 테스트할 수 있습니다.
#include <stdio.h>
enum designFlags {
ITALICS = 1,
BOLD = 2,
UNDERLINE = 4
} button;
값이 2의 거듭제곱이므로:
// 이진 표현
ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100
이들을 결합할 수 있습니다:
#include <stdio.h>
enum designFlags {BOLD = 1, ITALICS = 2, UNDERLINE = 4};
int main() {
int myDesign = BOLD | UNDERLINE; // 00000001 | 00000100 = 00000101
printf("%d", myDesign);
return 0;
}
출력
5
출력 5는 BOLD와 UNDERLINE이 모두 활성화됨을 나타냅니다.
특정 플래그 확인:
if (myDesign & ITALICS) {
// 이탤릭 처리
}
열거형 없이도 많은 것을 구현할 수 있지만, 관련 상수 관리, 특히 플래그 연산에 견고하고 타입 안전한 방법을 제공합니다.