[Flutter/Dart] enum 사용법과 예제

1. Dart에서 enum이란?

Dart에서 enum(열거형)은 관련된 상수 값을 그룹화하여 표현하는 방법입니다. 일반적으로 특정 옵션을 사전에 정의해놓을 때 사용됩니다. Dart의 enum은 코드의 가독성을 높이고, 실수를 줄이는 데 도움이 됩니다.

 

 

2. Dart에서 enum 선언하기

Dart에서 enum을 선언하는 기본적인 문법은 다음과 같습니다.

이 예제에서는 Status라는 enum을 정의하고, pending, approved, rejected 세 가지 상태를 포함하고 있습니다.

enum Status {
  approved,
  pending,
  rejected,
}

 

3. enum 값 사용하기

enum 값을 사용하는 방법은 다음과 같습니다.

void main() {
  Status currentStatus = Status.approved;
  print(currentStatus); // 출력: Status.approved
}

특정 enum 값을 확인하려면 다음과 같이 비교할 수 있습니다:

void main() {
  Status currentStatus = Status.approved;
  if (currentStatus == Status.approved) {
    print("승인된 상태입니다.");
  }
}

 

 

4. enum을 문자열로 변환하기

Dart에서 enum 값을 문자열로 변환할 때는 .toString() 또는 .name 속성을 사용할 수 있습니다.

void main() {
  Status currentStatus = Status.approved;
  
  print(currentStatus.toString()); // 출력: SStatus.approved
  print(currentStatus.name); // 출력: approved
}

toString()을 사용하면 enum 이름 앞에 Status.와 같은 접두사가 붙지만, .name을 사용하면 순수 문자열 값만 얻을 수 있습니다.

 

 

5. 문자열을 enum으로 변환하기

문자열을 enum 값으로 변환하려면 values.firstWhere() 메서드를 사용할 수 있습니다.

Status stringToEnum(String status) {
  return Status.values.firstWhere((e) => e.name == status, orElse: () => Status.pending);
}

void main() {
  String statusString = "approved";
  Status statusEnum = stringToEnum(statusString);
  
  print(statusEnum); // 출력: Status.approved
}

이렇게 하면 문자열 값을 안전하게 enum으로 변환할 수 있습니다.

 

 

6. enum에 추가 기능(메서드 및 속성) 추가하기

Dart 2.15부터는 enum에 메서드와 속성을 추가할 수 있습니다.

각 enum 값에 description 속성을 추가하고, printDescription 메서드를 정의하면 됩니다.

enum Role {
  admin("관리자"),
  user("사용자"),
  guest("손님");
  
  final String description;
  const Role(this.description);
  
  void printDescription() {
    print("역할: $description");
  }
}

void main() {
  Role role = Role.admin;
  role.printDescription(); // 출력: 역할: 관리자
}

 

 

7. switch문에서 enum 사용하기

Dart에서 switch 문과 enum을 함께 사용하면 가독성이 뛰어난 코드를 작성할 수 있습니다.

void checkStatus(Status status) {
  switch (status) {
    case Status.pending:
      print("처리 중입니다.");
      break;
    case Status.approved:
      print("승인되었습니다.");
      break;
    case Status.rejected:
      print("거절되었습니다.");
      break;
  }
}

switch 문을 사용할 때 모든 enum 값을 처리하는 것이 좋습니다. 그렇지 않으면 컴파일러에서 경고가 발생할 수 있습니다.

 

 

8. enum을 리스트로 활용하기

enum의 values 속성을 사용하면 enum 값 전체를 리스트로 다룰 수 있습니다.

void main() {
  for (var status in Status.values) {
    print(status);
  }
}

이 코드를 실행하면 모든 enum 값이 출력됩니다.

 

 

9. 결론

Dart에서 enum은 코드의 가독성을 높이고, 실수를 방지하며, 특정 상태나 옵션을 효과적으로 관리할 수 있는 강력한 기능입니다. 최신 Dart 버전에서는 enum에 속성과 메서드를 추가할 수도 있어 더욱 유용하게 사용할 수 있습니다! 😊