Menu
Coddy logo textTech

'switch' 문에서의 Enum

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 61번째.

열거형(enums)의 가장 강력한 활용 사례 중 하나는 switch 문과 함께 사용하는 것입니다. 열거형을 switch 문과 결합하면 더 안전하고 유지보수가 쉬운 코드를 작성할 수 있습니다.

switch 문에서 enum을 사용하는 방법은 다음과 같습니다:

enum Status {
  pending,
  running,
  completed
}

Status currentStatus = Status.pending;

switch (currentStatus) {
  case Status.pending:
    print('Task is waiting to start');
    break;
  case Status.running:
    print('Task is currently in progress');
    break;
  case Status.completed:
    print('Task has been finished');
    break;
}

switch 문과 함께 열거형(enums)을 사용하는 것의 장점은 Dart가 모든 가능한 열거형 값을 처리했는지 확인할 수 있다는 점입니다. 열거형 값 중 하나에 대한 case를 포함하는 것을 잊어버리면 Dart가 경고를 표시하여 코드의 버그를 방지하는 데 도움을 줍니다.

이 방식은 오타로 인해 예기치 않은 동작이 발생할 수 있는 switch 문에서 문자열이나 숫자를 사용하는 것보다 훨씬 안전합니다. enums를 사용하면 코드가 가능한 모든 시나리오를 처리하도록 보장하는 컴파일 타임 체크를 받을 수 있습니다.

challenge icon

챌린지

쉬움

열거형(enums)과 switch 문을 사용하여 게임 캐릭터의 상태를 관리하는 프로그램을 작성하세요. 여러분의 과제는 다음과 같습니다:

  1. idle, walking, running, jumping, attacking 값을 가지는 CharacterState라는 이름의 열거형을 정의합니다.
  2. CharacterState 타입의 currentState라는 변수를 생성하고 CharacterState.idle 값을 할당합니다.
  3. CharacterState 매개변수를 받아 switch 문을 사용하여 상태에 따른 문자열 메시지를 반환하는 getStateMessage 함수를 생성합니다:
    • CharacterState.idle의 경우: "Character is standing still"을 반환합니다.
    • CharacterState.walking의 경우: "Character is moving slowly"를 반환합니다.
    • CharacterState.running의 경우: "Character is moving quickly"를 반환합니다.
    • CharacterState.jumping의 경우: "Character is in the air"를 반환합니다.
    • CharacterState.attacking의 경우: "Character is fighting"을 반환합니다.
  4. 함수를 사용하여 다음의 정확한 형식으로 초기 상태 메시지를 출력합니다: Initial state: Character is standing still
  5. currentStateCharacterState.walking으로 변경합니다.
  6. 다음의 정확한 형식으로 업데이트된 상태 메시지를 출력합니다: Updated state: Character is moving slowly
  7. currentStateCharacterState.attacking으로 변경합니다.
  8. 다음의 정확한 형식으로 최종 상태 메시지를 출력합니다: Final state: Character is fighting

프로그램은 switch 문과 열거형을 적절히 사용하여 이러한 조합이 어떻게 타입 안전(type-safe)한 상태 관리를 제공하는지 보여주어야 합니다. switch 문은 모든 열거형 값을 처리하고 각 캐릭터 상태에 맞는 적절한 메시지를 반환해야 합니다. Dart 명명 규칙을 따르고 위에 지정된 정확한 문자열 메시지를 사용해야 합니다.

치트 시트

Enum은 타입 안전한 코드를 위해 switch 문과 함께 잘 작동합니다:

enum Status {
  pending,
  running,
  completed
}

Status currentStatus = Status.pending;

switch (currentStatus) {
  case Status.pending:
    print('Task is waiting to start');
    break;
  case Status.running:
    print('Task is currently in progress');
    break;
  case Status.completed:
    print('Task has been finished');
    break;
}

Dart는 switch 문에서 모든 enum 값이 처리되는지 확인하여 버그를 방지하고 컴파일 타임 체크를 제공합니다.

직접 해보기

import 'dart:io';

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

// TODO: 여기에 getStateMessage 함수를 만드세요

void main() {
  // TODO: 아래에 코드를 작성하세요
  
  // currentState 변수를 생성하고 CharacterState.idle을 할당하세요
  
  // 초기 상태 메시지를 출력하세요
  
  // currentState를 CharacterState.walking으로 변경하세요
  
  // 업데이트된 상태 메시지를 출력하세요
  
  // currentState를 CharacterState.attacking으로 변경하세요
  
  // 최종 상태 메시지를 출력하세요
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨