반응형
개발중에 Enum class를 자주 사용하는 편입니다.
간단하게 열거만 하려면 다른 언어들과 마찬가지로 사용해도 되지만 좀 더 발전된 형태로 추가를 하고 싶을때는 문서와 같이 일반 Class를 사용하는 느낌으로 사용할 수 있습니다.
/**
* 일반적으로 열거만 하는 방법
*/
enum Color { red, green, blue }
//단순히 category화를 위한 값으로 사용
//Log 찍으면 나오는 값
Color.red //Color.red
Color.red.index //0
Color.red.name //red
/**
* 발전된 형태의 enum class
* 선언해두는 category 내부에 값들을 정해두는 방법
*
* car, bus, bicycle이 red,green, blue와 같이 열거되는 값들
*/
enum 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;
}
//Log 찍으면 나오는 값
Vehicle.car.tires //4
Vehicle.car.passengers //5
Vehicle.bus.tires //6
Vehicle.bus.name //bus
Vehicle.bus.index //1
개인적으로 음식점에서 메뉴판을 주는데 목차없이 금액이랑 한번에 쓰여있는 느낌이 들기도 하고 UI작업에서 긴 문자열이 들어가야할 때 enum class에 너무 많은 데이터가 들어가 가독성이 떨어지는 경우도 있어서 다른 방법을 주로 사용합니다.
enum Vehicle {
car, bus, bicycle
}
extension VehicleExtension on Vehicle {
int get tires {
switch (this) {
case Vehicle.car: return 4;
case Vehicle.bus: return 6;
case Vehicle.bicycle: return 2;
}
}
int get passengers {
switch (this) {
case Vehicle.car: return 5;
case Vehicle.bus: return 50;
case Vehicle.bicycle: return 1;
}
}
int get carbonPerKilometer {
switch (this) {
case Vehicle.car: return 400;
case Vehicle.bus: return 800;
case Vehicle.bicycle: return 0;
}
}
int get carbonFootprint => (this.carbonPerKilometer / this.passengers).round();
bool get isTwoWheeled => this.tires == 2;
}
가이드문서의 예제 코드를 똑같은 기능을 하도록 구현했습니다.
큰 차이점은 기존 enum을 그대로 사용하는 것이고 각 변수별로 switch 접근으로 값을 가져오는 것이고 나머지는 거의 똑같이 구현이 가능합니다.
switch문으로 각 값을 정의해두다보니 코드의 길이는 길어질 수 있지만 enum class와 분리되어 있어 Vehicle이라는 class는 같이 사용하지만 value들을 다르게 사용하는 경우 등과 같이 재사용성이 좋고 초기화코드가 필요없다는 장점이 있어 경우에 따라서 선택하기 좋은 방법이라고 생각합니다.
enum | extension | |
장점 |
|
|
단점 |
|
|
반응형
'Develop > Flutter' 카테고리의 다른 글
[Package] 디자이너와 협업을 위한 개발툴 (0) | 2024.09.11 |
---|---|
[Package] FontSize 맞춤 위젯 개발 (0) | 2024.06.03 |
[Flutter] Plugin 비공개 배포 (0) | 2024.04.25 |