1. 열거형
여러 개의 관련된 상수를 하나의 그룹으로 정의하는 데이터 타입입니다.
예를 들어 요일, 계절, 방향 같은 그룹을 enum으로 만들 수 있어요.
enum [열거형 이름] {요소}
enum Season {
spring,
summer,
fall,
winter,
}
주의할 점은 enum은 main함수 안에서 사용할 수 없어요.
void main() {
enum Season {
spring,
summer,
fall,
winter
}
var myFavoriteSeason = Season.winter;
print(myFavoriteSeason);
}
/**
'enum' can't be used as an identifier because it's a keyword.
Try renaming this to be an identifier that isn't a keyword.
**/
enum은 컴파일 타임 상수로 전역적으로 사용되어야 합니다.
컴파일러는 enum을 함수 내부에서 선언할 수 없는 "키워드"로 인식하여 오류를 발생시킵니다.
아까 enum은 컴파일 타임 상수라고 했잖아요?
이는 코드 실행 전에 (컴파일 시점에) 메모리에 저장되어야 합니다.
하지만, 함수는 실행될 때(런타임)에 호출되므로, 함수 내부에서 enum을 선언하면 컴파일 시점에 인식할 수 없어요.
예를 들어 enum은 '학교에 등록된 정식 학생 명단'이라고 생각해 봅시다.
Dart 컴파일러는 학생 명단이 미리 정해져 있어야 프로그램을 실행할 수 있어요.
하지만 main 함수 안에서 enum을 선언하면 수업 중에 갑자기 새로운 학생 명단을 등록하는 것과 같아요.
따라서 이미 정해진 학생 명단(enum)을 컴파일 시점에 미리 알고 있어야 하므로, main함수에서 enum을 선언할 수 없어요.
2. 특징
enum의 특징은 뭐가 있을까요?
첫 번째는 enum 이름을 통해 포함된 값에 접근할 수 있어요.
void main() {
var myFavoriteSeason = Season.winter;
print(myFavoriteSeason);
}
enum Season {
spring,
summer,
fall,
winter
}
두 번째로 switch 문을 통해 enum에 포함된 값을 다룰 수 있어요.
물론 if도 가능하답니다.
void main() {
var myFavoriteSeason = Season.winter;
var result = '내가 좋아하는 계절은 ';
switch (myFavoriteSeason) {
case Season.spring:
result += '봄';
case Season.summer:
result += '여름';
case Season.fall:
result += '가을';
case Season.winter:
result += '겨울';
}
print(result); // 내가 좋아하는 계절은 가을
}
enum Season {
spring,
summer,
fall,
winter
}
주의할 점은 enum의 모든 값을 처리하지 않으면 오류가 발생해요.
void main() {
var myFavoriteSeason = Season.winter;
var result = '내가 좋아하는 계절은 ';
switch (myFavoriteSeason) {
case Season.spring:
result += '봄';
case Season.summer:
result += '여름';
case Season.fall:
result += '가을';
default :
result += '알 수 없음';
}
print(result); // 내가 좋아하는 계절은 알 수 없음
}
enum Season {
spring,
summer,
fall,
winter
}
/**
default가 없다면 오류 발생
The type 'Season' is not exhaustively matched by the switch cases since it doesn't match 'Season.winter'.
**/
세 번째는 index를 통해 enum에 포함된 값이 몇 번째에 있는지 알 수 있어요.
enum은 0부터 시작합니다.
void main() {
print(Season.fall.index); // 2
}
enum Season {
spring,
summer,
fall,
winter
}
네 번째는 values를 이용해 enum의 모든 값을 확인할 수 있어요.
void main() {
print(Season.values);
}
enum Season {
spring,
summer,
fall,
winter
}
// [Season.spring, Season.summer, Season.fall, Season.winter]
다섯 번째로는 name을 이용해 enum의 값을 문자열로 변환할 수 있어요.
기존에 출력을 하면 Seaon.spring으로 나오던 것이 spring으로 나와요.
보다 더 깔끔하게 이용할 수 있겠죠?
void main() {
print(Season.spring.name);
}
enum Season {
spring,
summer,
fall,
winter
}
// spring
3. 참고자료
https://dart.dev/language/enums
Enumerated types
Learn about the enum type in Dart.
dart.dev
'Dart' 카테고리의 다른 글
[Dart] 함수형 프로그래밍 (Functional Programming) (0) | 2025.03.12 |
---|---|
[Dart] 제네릭 (Generics) - 제네릭 함수 & 클래스 (0) | 2025.03.12 |
[Dart] 함수 (Functions) (0) | 2025.03.11 |
[Dart] 컬렉션 (Collections) - List, Set, Map (0) | 2025.03.11 |