열거형(enumerate)에 대해 알아보자

안녕하세요, 열정적인 프로그래머 되고자 하는 여러분! 오늘은 C 언어의 열거형(enumerate)이라는 fascinante 세계로 함께潜入해 보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 여정을 안내해 드리게 되어 기쁩니다. 좋아하는 음료를 한 잔 가져와, 편안하게 앉아 이 모험을 함께해 보세요!

C - Enumeration (or enum)

C 언어에서의 열거형(enumerate)이란?

자신의 옷장을 정리하는 상상해 봅시다. 여러분은 옷을 다양한 종류로 나누어 정리할 것입니다: 셔츠, 바지, 드레스 등이 그 예입니다. C 프로그래밍에서 열거형(enumerate, 줄여서 enum)은 코드에 대한 커스텀 카테고리를 만드는 것과 같습니다. 이는 일련의 이름이 지정된 상수 그룹을 정의하여 코드를 더 읽기 쉽고 정리된 상태로 유지하는 방법입니다.

간단한 예제로 시작해 보겠습니다:

enum Days {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};

이 예제에서 우리는 Days라는 enum을 생성했습니다. enum 내의 각 항목(MONDAY, TUESDAY 등)은 열거자(enumerator)라고 불립니다. 기본적으로 C는 이러한 열거자에게整数値를 할당하며, 0부터 시작합니다. 따라서 MONDAY는 0, TUESDAY는 1 등이 됩니다.

열거형의 정의와 선언

이제 enum이 무엇인지 이해했으므로, 어떻게 정의하고 선언하는지 살펴보겠습니다:

enum Fruits {
APPLE,
BANANA,
ORANGE,
MANGO
};

int main() {
enum Fruits favorite = MANGO;
printf("My favorite fruit is number %d\n", favorite);
return 0;
}

이 예제에서 우리는 Fruits라는 enum을 정의했습니다. 그런 다음 main 함수에서 enum Fruits 유형의 변수 favorite를 선언하고 MANGO 값을 할당했습니다. favorite를 인쇄할 때, 그는 3을 출력할 것입니다.因为 MANGO는 우리의 enum에서 네 번째 항목이며(0부터 시작함을 기억하세요).

열거형 변수 선언

열거형 변수를 선언하는 몇 가지 방법이 있습니다. 다음을 살펴보겠습니다:

enum Colors {RED, GREEN, BLUE};

// 방법 1: 변수를 별도로 선언
enum Colors paint;
paint = GREEN;

// 방법 2: 한 줄에 선언하고 초기화
enum Colors sky = BLUE;

// 방법 3: convenience를 위해 typedef 사용
typedef enum {CIRCLE, SQUARE, TRIANGLE} Shape;
Shape myShape = TRIANGLE;

이 각 방법은 같은 목표를 달성합니다: 열거형 유형의 변수를 생성합니다. 자연스럽게 느껴지는 방법을 선택하세요!

열거형 상수 값 변경

기본적으로 열거형 상수는 0부터 시작하여 증가하는 정수 값이 할당됩니다. 하지만 이러한 값들을 변경하고 싶다면 어떻게 하나요? 좋은 소식! 그럴 수 있습니다:

enum Months {
JAN = 1,
FEB,
MAR,
APR = 100,
MAY,
JUN
};

이 예제에서 JAN이 명시적으로 1로 설정되었으므로 FEB는 2가 되고 MAR는 3이 됩니다. 그런 다음 APR이 100으로 설정되므로 MAY는 101이 되고 JUN은 102가 됩니다.

switch 문에서의 열거형 사용

Enums는 switch 문에서 특히 유용합니다. 코드를 더 읽기 쉽고 오류가 적게 발생하도록 합니다. 예제를 보겠습니다:

enum Weekday {MON, TUE, WED, THU, FRI};

enum Weekday today = WED;

switch(today) {
case MON:
printf("It's Monday. Time to start the week!\n");
break;
case TUE:
printf("It's Tuesday. Keep the momentum going!\n");
break;
case WED:
printf("It's Wednesday. Halfway there!\n");
break;
case THU:
printf("It's Thursday. The weekend is almost here!\n");
break;
case FRI:
printf("It's Friday. Time to celebrate!\n");
break;
default:
printf("It's the weekend! Enjoy!\n");
}

이 switch 문은 정수 값을 사용한 경우보다 훨씬 명확합니다. 각 케이스가 무엇을 의미하는지 쉽게 알 수 있습니다.

열거형 타입의 예제

우리의 이해를 더욱 확고히 하기 위해 몇 가지 더 예제를 보겠습니다:

예제 1: 교통 신호

enum TrafficLight {
RED,
YELLOW,
GREEN
};

enum TrafficLight light = YELLOW;

if (light == RED) {
printf("Stop!\n");
} else if (light == YELLOW) {
printf("Prepare to stop.\n");
} else if (light == GREEN) {
printf("Go!\n");
}

예제 2: 카드 게임

enum Suit {HEARTS, DIAMONDS, CLUBS, SPADES};
enum Rank {ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};

struct Card {
enum Suit suit;
enum Rank rank;
};

struct Card myCard = {HEARTS, QUEEN};

printf("My card is the %d of %d\n", myCard.rank, myCard.suit);

열거형의 응용 사례

Enums는 프로그래밍에서 많은 실용적인 응용 사례가 있습니다. 다음은 몇 가지 예입니다:

  1. 상태 기계: Enums는 시스템의 다양한 상태를 나타낼 수 있습니다.
  2. 메뉴 옵션: Enums는 메뉴에서 선택할 수 있는 항목을 나타낼 수 있습니다.
  3. 오류 코드: 다양한 오류 유형을 나타낼 수 있습니다.
  4. 구성 옵션: Enums는 다양한 구성 설정을 나타낼 수 있습니다.

다음 표는 일반적인 enum 메서드를 요약합니다:

메서드 설명 예제
선언 enum 타입 선언 enum Colors {RED, GREEN, BLUE};
변수 생성 enum 타입의 변수 생성 enum Colors paint = GREEN;
값 할당 enum 상수에 특정 값 할당 enum Months {JAN = 1, FEB, MAR};
typedef 사용 enum에 대한 타입 정의 typedef enum {CIRCLE, SQUARE} Shape;
switch 사용 enum을 switch 문에서 사용 switch(shape) { case CIRCLE: ... }

이제 여러분은 C 언어의 열거형에 대해 알아보았습니다. 기억하시라, enums는 여러분의 친구입니다. 코드를 더 읽기 쉽고 정리되고 오류가 적게 발생하도록 도와줍니다. 프로그래밍 여정을 계속하면서, 열거형이 여러분의 삶을 더 쉽게 만들어 줄 많은 상황을 만날 것입니다. 행복하게 코딩하시고, 여러분의 enum이 항상 질서 정연하게 유지되길 바랍니다!

Credits: Image by storyset