[Dart] ENUM (enumeration) 열거형

AsherKim·2023년 5월 31일
0

플러터 TIL

목록 보기
17/18

Dart 언어에서 ENUM은 "enumeration"의 약자로, 서로 연관된 상수 값을 나타내는 데 사용되는 특별한 유형이다. ENUM은 정수, 문자열 또는 사용자 정의 값 중 하나를 가질 수 있는 고유한 값을 가지는 상수의 집합을 나타낸다.

ENUM을 사용하면 일련의 연관된 값들을 정의하고 사용할 수 있다. 이를 통해 코드의 가독성을 향상시키고, 잠재적인 오류를 줄이고, 코드 작성을 단순화할 수 있다. ENUM은 다양한 상황에서 사용될 수 있으며, 예를 들어 월(Month)의 열거형을 정의하거나, 요일(Day of the Week) 또는 컬러(Color)와 같은 값들을 나타낼 수 있다.

Dart에서 ENUM을 정의하려면 다음과 같은 구문을 사용한다

enum EnumName {
  value1,
  value2,
  value3,
  // ...
}

위의 코드에서 EnumName은 ENUM의 이름이다. 각 상수는 쉼표로 구분되며, 소문자로 작성된 값을 가질 수 있다. ENUM의 각 상수는 해당 상수의 위치에 따라 0부터 시작하는 정수값을 가지게 된다. 즉, value1은 0, value2는 1, value3는 2와 같은 값을 가지게 된다.

ENUM을 사용하면 switch 문과 함께 사용하여 특정 ENUM 값에 따라 코드의 흐름을 제어할 수 있다. 또한 ENUM 값은 직접 비교할 수 있으며, ENUM 값에 대한 문자열 표현을 얻을 수도 있다.

enum Color {
  red,
  green,
  blue,
}

void main() {
  Color myColor = Color.blue;
  
  switch (myColor) {
    case Color.red:
      print("Red color");
      break;
    case Color.green:
      print("Green color");
      break;
    case Color.blue:
      print("Blue color");
      break;
  }
  
  print("Enum value: ${myColor.index}");
  print("Enum string: ${myColor.toString()}");
}

위의 코드는 Color라는 ENUM을 정의하고, myColor 변수를 Color.blue로 초기화한다. switch 문을 사용하여 myColor 값을 기반으로 다른 동작을 수행하고, 마지막으로 myColor의 인덱스와 문자열 표현을 출력한다.

출력 결과

Blue color
Enum value: 2
Enum string: Color.blue

위의 예시를 통해 ENUM이 어떻게 사용되는지 간단히 알아볼 수 있다. ENUM은 코드의 가독성을 향상시키고, 상수 값의 타입을 명확히 지정하여 잠재적인 오류를 방지하는 데 도움을 준다. 또한 ENUM 값은 유형 안정성(Type Safety) 을 제공하므로 잘못된 ENUM 값을 사용하는 오류를 컴파일 시간에 잡아낼 수 있다.

ENUM은 Dart에서 많은 유용한 상황에서 사용될 수 있다. 예를 들어 UI 구성 요소의 상태, 게임의 상태, 사용자 권한 수준 등을 나타내는 ENUM을 정의할 수 있다. ENUM을 사용하여 코드를 구성하면 가독성이 높아지고, 유지보수가 쉬워지며, 일관성 있는 값의 사용을 보장할 수 있다.

다음은 Dart에서 ENUM을 사용하여 사용자 권한 수준을 나타내는 예시이다

enum UserRole {
  guest,
  user,
  admin,
}

class User {
  String name;
  UserRole role;
  
  User(this.name, this.role);
  
  void greet() {
    String roleString;
    
    switch (role) {
      case UserRole.guest:
        roleString = "Guest";
        break;
      case UserRole.user:
        roleString = "User";
        break;
      case UserRole.admin:
        roleString = "Admin";
        break;
    }
    
    print("Hello, $name! You are a $roleString.");
  }
}

void main() {
  User user1 = User("John", UserRole.admin);
  User user2 = User("Alice", UserRole.user);
  
  user1.greet();  // Hello, John! You are an Admin.
  user2.greet();  // Hello, Alice! You are a User.
}

위의 예시에서는 UserRole이라는 ENUM을 정의하고, User 클래스에서 name과 role을 포함하는 객체를 생성한다. greet() 메서드에서는 role 값을 기반으로 사용자에게 인사말을 출력한다.

ENUM을 사용하면 코드를 더 직관적이고 이해하기 쉽게 만들 수 있으며, 잘못된 값에 의한 버그를 방지할 수 있다. Dart에서 ENUM은 코드 작성을 단순화하고, 유지보수를 용이하게 하는 강력한 기능이다.

profile
추리를 좋아하는 개발자

0개의 댓글