열거형 (Enumerations) - 실습

Eungae's avatar
Dec 09, 2025
열거형 (Enumerations) - 실습

💡

실습 문제
Q1. Weather { sunny, cloudy, rainy } enum 만들기

Q2. switch문으로 각각 다른 메시지 출력

문제 풀이의 정답은 아래와 같았다.

enum Weather { sunny, cloudy, rainy }

void main() {
  Weather today = Weather.sunny;

  switch (today) {
    case Weather.sunny:
      print('날씨가 맑아요!');
      break;
    case Weather.cloudy:
      print('흐려요.');
      break;
    case Weather.rainy:
      print('비가 내려요 ☔️');
      break;
  }
}
// 날씨가 맑아요!

하지만 나는 더 해보고 싶었다.

/* 목표:
"날씨가 맑아요."
"오늘은 흐려요."
"비가 오네요." 를 순차적으로 출력하기*/

trial 1 : for문 활용

enum Weather { sunny, cloudy, rainy }

void main () {
  for (var today in Weather) {
    if (Weather.sunny) {
      print("날씨가 맑아요.");
    } if else (Weather.cloudy) {
      print("오늘은 흐려요.");
    } if else (Weather.rainy) {
      print("비가 오네요.")
    }
  }

// error : The type 'Type' used in the 'for' loop must implement 'Iterable'.

야심차게 for문을 활용해보려고 했지만, 1차 시도는 실패했다.

실패한 이유는 : for문에는 iterable한, 즉 반복 가능한 것을 넣어야 하는데, 나는 거기에 Type을 넣었다는 것이다.

요거를 수정하자면 이렇게 수정할 수 있다.

[예제1] 성공

enum Weather { sunny, cloudy, rainy }

void main () {
  for (var today in Weather.values) {
    if (today == Weather.sunny) {
      print("날씨가 맑아요.");
    } else if (today == Weather.cloudy) {
      print("오늘은 흐려요.");
    } else if (today == Weather.rainy) {
      print("비가 오네요.");
    }
  }

/* 
날씨가 맑아요.
오늘은 흐려요.
비가 오네요. */

수정하고 나니 확실히 알겠다.

if ( ) 괄호 안에는 true/false로 판별 가능한 조건식을 써야 하는데, 나는 그저 상수를 써놓은 셈이구나.

(today == Weather.sunny) 등의 조건식으로 수정하니, 문제가 해결되었다.

나는 이걸 TIL작성하면서 GPT에게 물어봐서 해결했다.

문제를 풀 때는 이 생각을 못 했어서, 다른 방법을 시도했었다.

trial 2. enum을 List로 바꿔보자.

enum Weather { sunny, cloudy, rainy }

void main () {
  List<String> weather = Weather.values.toList();

/* error: A value of type 'List<Weather>' can't be assigned to a variable of type 'List<String>'.
  Try changing the type of the variable, or casting the right-hand type to 'List<String>'. */

시작부터 에러 작렬.

튜터님께 여쭤보니, enum이 List로 바뀔 때는 Weather라는 enum type으로 잡힌다는 것이다! 그러니 List<String>이 아닌 List<Weather>이라고 설정했어야 한다고.

enum Weather { sunny, cloudy, rainy }

void main () {
  List<Weather> weather = Weather.values;
  print(weather); // [Weather.sunny, Weather.cloudy, Weather.rainy]

 for (int count = 0; count < 3; count++) {
    switch (weather[count]) {
      case (Weather[0]):
        print("날씨가 맑아요.");
        break;
      case (Weather[1]):
        print("오늘은 흐려요.");
        break;
      case (Weather[2]):
        print("비가 오네요.");
        break;
    }
  }

/* error : The expression of a constant pattern must be a valid constant.
Try making the expression a valid constant.*/

List<Weather>까지는 잘 했는데 또 뭐가 문제인가!?

하니, case() 안에 들어가는 요소는 constant, 즉 상수여야 한다는 것이다.

weather[0]는 상수가 아닌, 컴파일러에서 연산을 해야하는 변수인 것!

또 하나 배웠다.

그리하여 나의 최종 실습 코드는 아래와 같다.

[예제2] 성공

enum Weather { sunny, cloudy, rainy }

void main () {
  List<Weather> weather = Weather.values;
  print(weather); // [Weather.sunny, Weather.cloudy, Weather.rainy]

 for (int count = 0; count < 3; count++) {
    switch (weather[count]) {
      case (Weather.sunny):
        print("날씨가 맑아요.");
        break;
      case (Weather.cloudy):
        print("오늘은 흐려요.");
        break;
      case (Weather.rainy):
        print("비가 오네요.");
        break;
    }
  }

평가

[예제1] 성공

enum Weather { sunny, cloudy, rainy }

void main () {
  for (var today in Weather.values) {
    if (today == Weather.sunny) {
      print("날씨가 맑아요.");
    } else if (today == Weather.cloudy) {
      print("오늘은 흐려요.");
    } else if (today == Weather.rainy) {
      print("비가 오네요.");
    }
  }

[예제2] 성공

enum Weather { sunny, cloudy, rainy }

void main () {
  List<Weather> weather = Weather.values;
  print(weather); // [Weather.sunny, Weather.cloudy, Weather.rainy]

 for (int count = 0; count < 3; count++) {
    switch (weather[count]) {
      case (Weather.sunny):
        print("날씨가 맑아요.");
        break;
      case (Weather.cloudy):
        print("오늘은 흐려요.");
        break;
      case (Weather.rainy):
        print("비가 오네요.");
        break;
    }
  }

두 코드의 결과는 동일하지만, 한 눈에 보아도 예제1이 훨씬 깔끔하다.

예제2는 enum을 List로 변환하고, 이걸 또 for문을 돌리기 위해 count까지 만들어가며 돌린 느낌.

[예제3] BEST

enum Weather { sunny, cloudy, rainy }

void main () {
  for (var today in Weather.values) {
    switch (today) {
      case Weather.sunny:
        print("날씨가 맑아요.");
        break;

      case Weather.cloudy:
        print("오늘은 흐려요.");
        break;

      case Weather.rainy:
        print("비가 오네요.");
        break;
    }
  }
}

GPT가 추천하는 BEST는 이거다.

enum은 switch랑 궁합이 좋다는 것이 핵심.

var today in Weather.values를 통해

enum은 enum끼리 비교해야 한다는 걸 배웠다.

TIL 요약

  1. if문의 조건식은 bool 판단이 가능해야 한다.

  2. enum은 List로 변환 시 enum name 자체가 Type이 된다.
    enum Weather → Weather.values.toList() == List<Weather>

  3. switch문에서 case에 들어가는 항목은 상수constant만 가능하다.

  4. enum은 switch랑 궁합이 좋다.

  5. enum은 enum끼리 작업해야 한다.

Share article

나새끼메이커