Dart는 Kotlin처럼 enum에 특정 값을 대입시킬 수가 없다.

그래서 Enum-like class를 따로 정의하거나 따로 map을 구현해놓거나.. 등등 귀찮게 해야하는데 그러한 다양한 방법을 알아보도록 하자

enum class

일단 기본 enum class는 아래와 같다.

zero base index를 가지고 있음. 앞에서 부터 0, 1, 2,..

Cat.values를 통해 [ Cat.black, Cat.white ] 와 같은 리스트를 얻을 수 있음

enum Cat { black, white }

// 사용

Cat cat = Cat.black;
print(cat.index) // 0 , Cat.white.index 는 1

List<Cat> cats = Cat.values; // [Cat.black, Cat.white]
assert(colors[1] == Cat.white);

enum 을 정의하는 것은 아래와 같은 클래스를 정의하는 것과 같다.

[ 출처 : https://dart.dev/guides/language/specifications/DartLangSpec-v2.10.pdf ]

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2ed8266c-570a-46cb-9da2-016ae3f45d7c/Untitled.png

여기서 각 enum의 값에 index 이외의 값이 필요하다면?? 어떤 식으로 구현할 수 있을까

enum value 이름과 같은 string 값이 필요한 경우

예를 들어 위의 예시에서 Cat.black인데 String 값으로 'black' 을 얻고 싶은 경우는 단순하다.

Cat.black.toString()을 하면 'Cat.black'이 출력된다.