티스토리 뷰

반응형

열거형 타입을 일반적으로 열거형 또는 enums라고 부른다. 열거형 타입은 고정된 수의 상수 값을 나타내기 위해 사용되는 특별한 종류의 클래스이다. 

 

모든 열거형으로 자동으로 Enum 클래스를 상속한다. 또한 열거형은 sealed이므로 확장, 구현, 믹스인으로 사용할 수 없고, 명시적으로 인스턴스화할 수 없다.

 

 

 

단순 열거형 선언

단순 열거형 타입을 선언하려면 enum 키워드를 사용하고 열거하려는 값을 나열한다.

enum Color { red, green, blue }

 

열거형 타입을 선언할 때 후행 쉼표를 사용할 수 있다. 후행 쉼표는 상수 값을 복사-붙여 넣기를 할 때, 쉼표를 누락하는 오류를 방지하게 한다.

enum Color { red, green, blue, }

 

 

 

확장된 열거형 선언

다트에서는 필드, 메서드 및 상수 생성자가 있는 클래스를 선언하는 열거형을 허용한다. 

 

확장형 열거형을 선언하려면 일반 클래스와 유사한 구문을 사용할 수 있지만 몇 가지 요구 사항이 있다.

  • 인스턴스 변수는 믹스인에 추가된 것도 포함하여 모두 final 이어야 한다.
  • 모든 생성자는 상수여야 한다.
  • 팩토리 생성자는 해당 열거형 인스턴스 중 하나만 반환할 수 있다.
  • Enum이 자동으로 확장되므로 다른 클래스를 확장할 수 없다. 
  • index, hashCode, == 연산자를 오버라이드할 수 없다.
  • 자동으로 생성되는 정적 values 게터와 충돌하기 때문에 values 이름의 멤버를 열거형에 선언할 수 없다.
  • 열거형의 모든 인스턴스는 선언의 시작 부분에 선언되어야 하며, 최소 하나 이상의 인스턴스가 선언되어야 한다.
  • 확장된 열거형의 인스턴스 메서드는 현재 값을 참조하기 위해 this를 사용할 수 있다.

다음은 여러 인스턴스, 인스턴스 변수, 게터 및 구현된 인터페이스가 있는 확장된 열거형을 선언한 예제이다.

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();

  bool get isTwoWheeled => this == Vehicle.bicycle;

  @override
  int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}

 

 

 

열거형 사용

열거형 값을 다른 정적 변수처럼 접근할 수 있다.

final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {
  print('Your favorite color is blue!');
}

 

각 열거형 값은 0으로 시작하는 위치를 반환하는 index 게터를 가지고 있다. 예를 들어, 첫 번째 값은 인덱스 0을 가지며, 두 번째 값은 인덱스 1을 가진다.

assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);

 

모든 열거형 값을 리스트로 얻으려면, value 게터를 사용하면 된다.

List<Color> colors = Color.values;
assert(colors[2] == Color.blue);

 

열거형은 switch 문에서 사용할 수 있으며, 열거형의 모든 값을 처리하지 않으면 에러가 발생한다.

var aColor = Color.blue;

switch (aColor) {
  case Color.red:
    print('Red as roses!');
  case Color.green:
    print('Green as grass!');
  default: // 이 없으면 경고가 나타납니다.
    print(aColor); // 'Color.blue'
}

 

열거형 값의 이름에 접근하려면 name 속성을 사용하면 된다.

print(Color.blue.name); // 'blue'

 

열거형 값의 멤버에 접근하려면 일반 객체에서 하는 것처럼 접근할 수 있다.

print(Vehicle.car.carbonFootprint);
반응형

'다트 공식 문서 번역' 카테고리의 다른 글

다트] 확장 타입  (0) 2024.08.05
다트] 확장 메서드  (0) 2024.08.04
다트] 믹스인  (0) 2024.08.04
다트] 클래스를 확장하기  (0) 2024.08.03
다트] 메서드  (0) 2024.08.01
댓글
공지사항