guricode

Dart 간단 정리 - 열거형 (Enum) 완전 정복 본문

앱/Flutter&Dart

Dart 간단 정리 - 열거형 (Enum) 완전 정복

agentrakugaki 2025. 6. 24. 20:22

 

Dart에서 헷갈리기 쉬운 개념 중 하나인 열거형(enum)! 이번 정리에서는 열거형이 어떤 친구인지, 언제 쓰는지, 실제 코드와 함께 하나씩 뜯어보자.


열거형 (Enum)이란?

  • 여러 개의 고정된 상수 값을 하나의 이름 아래 묶어서 정의할 수 있는 문법
  • 열거형의 각 값들은 고유하며 순서(index) 도 가지고 있음
// Color 라는 열거형을 선언
enum Color { red, green, blue }

// Animal 이라는 열거형
enum Animal {
  cat,
  dog,
  tiger,
  elephant,
}

열거형의 기본 사용

 

열거형 값에 접근하기

var myFavoriteColor = Color.blue;
print(myFavoriteColor); // Color.blue

 switch 문에서 활용

enum Color { red, green, blue }

void main() {
  var myFavoriteColor = Color.green;
  var result = '내가 제일 좋아하는 색은 ';

  switch (myFavoriteColor) {
    case Color.red:
      result += '빨간색';
      break;
    case Color.green:
      result += '초록색';
      break;
    case Color.blue:
      result += '파란색';
      break;
  }

  print(result); // 내가 제일 좋아하는 색은 초록색
}

 if 문

if (myFavoriteColor == Color.green) {
  print('초록색 좋아하네요!');
}

열거형의 속성

🔹 index

  • 값이 열거형 내에서 몇 번째인지 알려줌 (0부터 시작)
print(Color.red.index);    // 0
print(Color.green.index);  // 1
print(Color.blue.index);   // 2

🔹 values

  • 열거형의 모든 요소를 리스트로 가져옴
var allColors = Color.values;
print(allColors); // [Color.red, Color.green, Color.blue]

🔹 name (Dart 2.15 이상)

  • 요소의 문자열 이름을 가져옴
print(Color.red.name); // 'red'

언제?

  • 연관된 상수값 집합이 필요할 때
  • 예: 요일, 상태(status), 카테고리 등
  • 아래 예시는 간단한 상태값 처리 예제
enum Status { loading, success, error }

void handleStatus(Status status) {
  if (status == Status.success) {
    print('작업 성공!');
  } else if (status == Status.error) {
    print('작업 실패..');
  } else {
    print('작업 중...');
  }
}

Set과의 차이점

구분 Set Enum

값 추가/삭제 가능 불가능
중복 허용 ❌ 제거만 함 ❌ 중복 정의 시 오류 발생
순서 없음 있음 (index 존재)
목적 집합 데이터 관리 상수 값 그룹 정의
// Set: 추가 가능
var fruits = <String>{};
fruits.add('사과');
fruits.add('사과'); // 중복되지만 오류 없음
print(fruits); // {사과}

// Enum: 중복 정의 불가
enum Color { red, green, red } // Error: 'red' is already declared

 

아래 코드를 직접 입력하고 출력 결과를 확인해보자.

enum Season { spring, summer, fall, winter }

void printSeasonMessage(Season season) {
  switch (season) {
    case Season.spring:
      print('꽃 피는 봄입니다.');
      break;
    case Season.summer:
      print('더운 여름입니다.');
      break;
    case Season.fall:
      print('시원한 가을입니다.');
      break;
    case Season.winter:
      print('추운 겨울입니다.');
      break;
  }
}

void main() {
  printSeasonMessage(Season.fall);
}

 

요약

속성 설명

.index 해당 값의 순서 (0부터 시작)
.values 전체 열거형 리스트 가져오기
.name 열거형 값의 이름 (문자열)

열거형은 안정적이고 명확한 상수 집합을 정의할 때 . switch 문과 같이 자주 쓰이는 제어 구조와 함께 사용하면 코드를 훨씬 깔끔하게 만들 수 있다