명명된 상수를 위한 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을 할당합니다챌린지
쉬움신호등 색상을 위한 enum을 정의하고 그 사용법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음 상수를 정확히 이 순서대로 포함하는
TrafficLight라는 이름의enum을 정의합니다:REDYELLOWGREEN
- main 함수에서:
enum TrafficLight타입의currentLight라는 변수를 선언합니다.- 신호등 상태를 나타내는 정수(0, 1 또는 2)를 입력받습니다.
- 입력에 따라 해당 enum 값을
currentLight에 할당합니다:- 입력이 0이면,
RED를 할당합니다. - 입력이 1이면,
YELLOW를 할당합니다. - 입력이 2이면,
GREEN를 할당합니다.
- 입력이 0이면,
- 현재 신호 상태를 다음 형식으로 출력합니다:
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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Logic & Flow의 모든 레슨
10열거형(Enum)과 Typedef
명명된 상수를 위한 enum열거형(Enum) 선언과 사용Switch 문에서의 열거형(Enum) 활용타입 별칭을 위한 typedef 사용구조체와 typedef요약: Typedef와 열거형(Enum) 실습