dart enum value String 으로 변환하기

Chang Hyun Kim·2021년 6월 3일
4

Typescript 에서의 enum

저는 타입스크립트에서 enum을 사용할 때 아래와 같이
enum value에 다른 값을 매핑하여 자주 사용하였는데요

enum Hello {
	a = "나는 A",
	b = "나는 B"
}
console.log(Hello.a) // 나는 A
console.log(Hello.a === "나는 A") // true

dart 에서의 enum

다트에서는 이와 같은 문법을 지원하지 않습니다.

// 컴파일 에러
enum Hello {
  a = "나는 A",
  b = "나는 B"
}

타입스크립트의 예제처럼 사용하고 싶을 때는 따로 enum value에 따라
값을 변환해 주는 함수를 만들어서 사용했었습니다.

enum Hello { a, b }

String convertHelloToKorText(Hello hello) {
  switch (hello) {
    case Hello.a:
      return "나는 A";
    case Hello.b:
      return "나는 B";
    default:
      return "";
  }
}
print(convertHelloToKorText(Hello.a)); // 나는 A
print(convertHelloToKorText(Hello.a) == "나는 A"); // true

해당 방식으로 똑같이 사용은 가능하지만 해당 함수를 가지고 있는 클래스를 만들거나 해야 하고,
매번 함수를 불러서 사용해야 하는 부분에서 사용성이 떨어집니다.

하지만 extension method를 이용하면 타입스크립트처럼 값을 매핑하여 사용할 수 있는 건 아니지만,
위와 같은 함수 없이 사용할 수 있습니다.

Extension methods

extension methods를 이용하면 원시 타입(Primitive Type), 클래스 등을 확장하여
새로운 메소드 등을 추가할 수 있습니다.

extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }
}
print("42".parseInt().runtimeType); // int

enum 에 extension 적용해보기

enum에도 마찬가지로 적용이 가능하며 일반 함수뿐만 아니라 getter 함수 등도 정의가 가능하기 때문에
마치 클래스의 멤버 변수를 가져오듯이 구현이 가능합니다.

enum Hello { a, b }

extension HelloExtension on Hello {
  String get convertedKorText {
    switch (this) {
      case Hello.a:
        return "나는 A";
      case Hello.b:
        return "나는 B";
      default:
        return "";
    }
  }
}
print(Hello.a.convertedKorText); // 나는 A
print(Hello.a.convertedKorText == "나는 A"); // true

이러한 방식으로 사용하여도 타입스크립트처럼 값을 바로 매핑하여 사용할 수 있는 건 아니지만,
함수를 사용하는 방식보다는 편하게 사용이 가능합니다.

profile
https://kimbiyam.me/ 블로그 이전하였습니다

0개의 댓글