반응형
기본 enum 사용
enum Color { red, green, blue }
blue 옆에 콤마를 붙여도 가능하다. 참고로 이 콤마를 trailing commas라고 부르며, 복붙 시에 에러를 방지해주는 효과를 가진다고 한다.
확장된 enum 사용
Enum을 마치 클래스처럼 확장하여 사용할 수 있다. 몇가지 규칙만 준수하면 된다.
1. 인스턴스 변수는 final이어야 한다.
2. 생성자는 constant이어야 한다.(메모리에 한번만 올라가게 하려고 그런거 같음)
3. 팩토리 생성자는 오직 정의되어있는 인스턴스들 중 하나만을 리턴할 수 있다.
4. Enum 클래스가 자동적으로 extends 되어 있어서, 다른 클래스를 상속받을 수 없다.
5. index, hashCode, 동등성을 재정의(override)할 수 없다.
6. values라는 이름의 게터가 자동적으로 생성되므로, 해당 이름으로 멤버를 선언할 수 없다.
7. enum의 모든 인스턴스들은 반드시 시작 부분에서 선언되어야 하고, 적어도 1개의 인스턴스가 선언되어야 한다.
예시
enum Vehicle implements Comparable<Vehicle> {
car(tires: 4, passengers: 5, carbonPerKilometer: 400),
bus(tires: 6, passengers: 50, carbonPerKilometer: 800),
bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0);
const Vehicle({
required this.tires,
required this.passengers,
required this.carbonPerKilometer,
});
final int tires;
final int passengers;
final int carbonPerKilometer;
int get carbonFootprint => (carbonPerKilometer / passengers).round();
@override
int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}
enum의 사용
enum에서는 기본적으로 index, values, name 메서드를 제공한다. 아래는 그 사용 예시다.
- index : 0부터 시작
assert(Color.red.index == 0);
- values
List<Color> colors = Color.values;
assert(colors[2] == Color.blue);
- name : String으로 변환
print(Color.blue.name); // 'blue'
- switch ⇒ default 사용
var aColor = Color.blue;
switch (aColor) {
case Color.red:
print('Red as roses!');
break;
case Color.green:
print('Green as grass!');
break;
default: // Without this, you see a WARNING.
print(aColor); // 'Color.blue'
}
다트 언어 공식문서 : https://dart.dev/guides/language/language-tour
댓글