Menu
Coddy logo textTech

명명된 상수를 위한 enum

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 55번째.

C 프로그램을 작성할 때, 종종 서로 관련된 상수 값들의 집합을 다루어야 할 때가 있습니다. 예를 들어, 요일, 월, 또는 프로그램의 다양한 상태를 표현해야 할 수도 있습니다. 0, 1, 2와 같은 가공되지 않은 숫자 대신 enum을 사용하여 이러한 상수들에 의미 있는 이름을 부여할 수 있습니다.

열거형 또는 enum은 이름이 있는 정수 상수 그룹을 정의할 수 있게 해줍니다. 이를 통해 코드를 훨씬 더 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다. 기본 구문은 다음과 같습니다:

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

기본적으로 첫 번째 이름은 0의 값을 갖고, 두 번째는 1을 갖는 식입니다. 따라서 MONDAY는 0과 같고, TUESDAY는 1과 같으며, SUNDAY는 6과 같습니다. 이 방식은 0일이 월요일이라거나 6일이 일요일이라는 것을 기억하는 것보다 훨씬 더 명확합니다.

enum을 사용하면 코드가 자기 문서화(self-documenting)되며, 프로그램 전반에서 매직 넘버(magic numbers)를 사용할 때 발생할 수 있는 오류를 방지하는 데 도움이 됩니다.

enum 타입의 변수를 선언하고 여기에 enum 값을 할당할 수 있습니다:

enum DayOfWeek today;
today = MONDAY;  // today에 0을 할당합니다
challenge icon

챌린지

쉬움

신호등 색상을 위한 enum을 정의하고 그 사용법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 다음 상수를 정확히 이 순서대로 포함하는 TrafficLight라는 이름의 enum을 정의합니다:
    • RED
    • YELLOW
    • GREEN
  2. main 함수에서:
    • enum TrafficLight 타입의 currentLight라는 변수를 선언합니다.
    • 신호등 상태를 나타내는 정수(0, 1 또는 2)를 입력받습니다.
    • 입력에 따라 해당 enum 값을 currentLight에 할당합니다:
      • 입력이 0이면, RED를 할당합니다.
      • 입력이 1이면, YELLOW를 할당합니다.
      • 입력이 2이면, GREEN를 할당합니다.
    • 현재 신호 상태를 다음 형식으로 출력합니다: Current light: [enum_name]
    • 현재 신호의 숫자 값을 다음 형식으로 출력합니다: Numeric value: [number]
    • 현재 신호에 따른 동작을 결정하고 출력합니다:
      • RED인 경우: Action: Stop을 출력합니다.
      • YELLOW인 경우: Action: Caution을 출력합니다.
      • GREEN인 경우: Action: Go를 출력합니다.
    • 시퀀스에 따라 다음 신호를 계산하고 출력합니다:
      • 현재 신호가 RED (0)이면, 다음은 GREEN (2)입니다.
      • 현재 신호가 YELLOW (1)이면, 다음은 RED (0)입니다.
      • 현재 신호가 GREEN (2)이면, 다음은 YELLOW (1)입니다.
    • 다음 신호를 다음 형식으로 출력합니다: Next light: [enum_name]

이 챌린지는 enum 상수가 가공되지 않은 숫자를 사용하는 것보다 코드를 얼마나 더 읽기 쉽게 만드는지 보여줍니다. 0이 빨간색, 1이 노란색, 2가 초록색임을 기억하는 대신 RED, YELLOW, GREEN과 같이 의미 있는 이름을 사용할 수 있습니다. 여러분은 enum을 정의하고, 할당 및 비교에서 enum 상수를 사용하며, enum 상수의 기본 정수 값에 접근하는 연습을 하게 됩니다.

치트 시트

enum을 사용하면 명명된 정수 상수 그룹을 정의할 수 있어, 가공되지 않은 숫자(raw numbers)를 사용하는 것보다 코드를 더 읽기 쉽게 만들 수 있습니다:

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

기본적으로 첫 번째 이름은 0, 두 번째 이름은 1 등의 값을 갖습니다. 따라서 MONDAY는 0, TUESDAY는 1과 같습니다.

enum 타입의 변수를 선언하고 여기에 enum 값을 할당할 수 있습니다:

enum DayOfWeek today;
today = MONDAY;  // today에 0을 할당합니다

직접 해보기

#include <stdio.h>

// TODO: 여기에 TrafficLight 열거형(enum)을 정의하세요

int main() {
    // 입력 읽기
    int input;
    scanf("%d", &input);
    
    // TODO: currentLight 변수를 선언하고 입력에 따라 열거형 값을 할당하세요
    
    // TODO: 현재 신호 상태를 출력하세요
    
    // TODO: 숫자 값을 출력하세요
    
    // TODO: 현재 신호에 따른 동작을 출력하세요
    
    // TODO: 다음 신호를 계산하고 출력하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨