Switch 문에서의 열거형(Enum) 활용
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 57번째.
C 프로그래밍에서 가장 강력한 조합 중 하나는 enum 값과 switch 문을 함께 사용하는 것입니다. 이러한 결합은 프로그램의 의사 결정 과정을 명확하게 표현하는, 가독성이 뛰어나고 유지보수가 쉬운 제어 흐름 로직을 만들어냅니다.
switch 문에서 열거형(enum) 상수를 케이스(case)로 사용하면 코드가 자체적으로 문서화됩니다. case 0: 또는 case 5:와 같은 알 수 없는 숫자 대신, 그 목적을 즉시 전달하는 의미 있는 이름을 보게 됩니다:
switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
printf("It's a weekday\n");
break;
case SATURDAY:
case SUNDAY:
printf("It's a weekend\n");
break;
}이 접근 방식은 코드를 훨씬 더 이해하고 수정하기 쉽게 만들어 줍니다. 이 코드를 읽는 사람은 누구나 각 케이스가 무엇을 나타내는지 즉시 알 수 있으며, 새로운 케이스를 추가하거나 로직을 변경하는 것이 간단해집니다. 컴파일러 또한 오류를 잡는 데 도움을 줍니다. enum 상수의 철자를 틀리면 소리 없는 버그가 발생하는 대신 컴파일 오류가 발생합니다.
챌린지
쉬움enum과 switch 문을 사용하여 간단한 날씨 자문 시스템을 구축하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음 상수를 정확히 이 순서대로 포함하는
WeatherCondition이라는 이름의enum을 정의합니다:SUNNYCLOUDYRAINYSTORMYSNOWY
- 다음과 같은
getWeatherAdvice라는 이름의 함수를 작성합니다:weather라는 이름의enum WeatherCondition매개변수를 받습니다.- 아무것도 반환하지 않습니다 (void).
switch문을 사용하여 날씨 상태에 따라 날씨별 조언을 출력합니다:SUNNY의 경우:Perfect day for outdoor activities!를 출력합니다.CLOUDY의 경우:Good day for a walk, no sun protection needed.를 출력합니다.RAINY의 경우:Don't forget your umbrella!를 출력합니다.STORMY의 경우:Stay indoors and avoid travel.를 출력합니다.SNOWY의 경우:Drive carefully and dress warmly.를 출력합니다.
- 다음과 같은
getActivitySuggestion이라는 이름의 함수를 작성합니다:weather라는 이름의enum WeatherCondition매개변수를 받습니다.- 아무것도 반환하지 않습니다 (void).
switch문을 사용하여 날씨에 따른 활동을 제안합니다:SUNNY의 경우:Suggested activity: Beach or hiking을 출력합니다.CLOUDY의 경우:Suggested activity: Photography or gardening을 출력합니다.RAINY의 경우:Suggested activity: Reading or indoor games를 출력합니다.STORMY의 경우:Suggested activity: Movie marathon을 출력합니다.SNOWY의 경우:Suggested activity: Skiing or hot cocoa를 출력합니다.
- main 함수에서:
currentWeather라는 이름의enum WeatherCondition타입 변수를 선언합니다.- 날씨 상태를 나타내는 정수(0, 1, 2, 3 또는 4)를 입력받습니다.
- 입력값에 따라 해당 enum 값을
currentWeather에 할당합니다. - 현재 날씨 상태를 다음 형식으로 정확히 출력합니다:
Current weather: [numeric_value] currentWeather를 인자로 하여getWeatherAdvice함수를 호출합니다.currentWeather를 인자로 하여getActivitySuggestion함수를 호출합니다.
이 챌린지는 enum과 switch 문을 결합하여 읽기 쉽고 유지 관리가 용이한 코드를 만드는 방법을 보여줍니다. switch 문에서 혼란스러운 숫자 케이스를 사용하는 대신, 프로그램의 로직을 명확하게 표현하는 의미 있는 enum 상수를 사용하게 됩니다. switch 문은 자체적으로 문서화되어 각 케이스가 무엇을 나타내는지 쉽게 이해하고 필요에 따라 동작을 수정할 수 있게 해줍니다.
치트 시트
enum 값을 switch 문과 함께 사용하면 가독성이 좋고 유지보수가 쉬운 제어 흐름 로직을 만들 수 있습니다:
switch (day) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
printf("It's a weekday\n");
break;
case SATURDAY:
case SUNDAY:
printf("It's a weekend\n");
break;
}이러한 접근 방식은 case 0: 또는 case 5:와 같은 알 수 없는 숫자 대신 의미 있는 이름을 사용하여 코드를 자기 문서화(self-documenting)하게 만듭니다. 컴파일러는 철자가 틀린 enum 상수에 대해 소리 없는 버그 대신 컴파일 오류를 생성하여 오류를 포착하는 데 도움을 줍니다.
직접 해보기
#include <stdio.h>
// TODO: 여기에 WeatherCondition 열거형을 정의하세요
// TODO: 여기에 getWeatherAdvice 함수를 구현하세요
// TODO: 여기에 getActivitySuggestion 함수를 구현하세요
int main() {
// 입력을 읽습니다
int weatherInput;
scanf("%d", &weatherInput);
// TODO: currentWeather 변수를 선언하고 입력에 따라 열거형 값을 할당하세요
// TODO: "Current weather: [numeric_value]" 형식으로 현재 날씨 상태를 출력하세요
// TODO: getWeatherAdvice 함수를 호출하세요
// TODO: getActivitySuggestion 함수를 호출하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Logic & Flow의 모든 레슨
10열거형(Enum)과 Typedef
명명된 상수를 위한 enum열거형(Enum) 선언과 사용Switch 문에서의 열거형(Enum) 활용타입 별칭을 위한 typedef 사용구조체와 typedef요약: Typedef와 열거형(Enum) 실습