본문 바로가기
Frontend, Client/Flutter

[Flutter] 플러터 - 다트 : ENUM 타입 알아보기(enumerated types)

by ggyongi 2022. 12. 9.
반응형

기본 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

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글