2020. 12. 13. 02:48ㆍFlutter
enum 타입
혼자 문서화를 잘하는 개발 팀이라면? 모르겠지만! 개발을 하면서 제품의 특정 타입들을 ( male : 1, female : 2) 숫자로 표기하는 것은 유지 보수 측면에서 혼란이 올 수 있습니다.
특히! 다수의 사람들 아니 내가 짠 코드지만 6개월 있다 다시 내 코드를 보면
"이 숫자 2가 어떤 분기 처리를 하려고 2라고 표현한 거지?"
이런 상황에 놓일 수 있습니다. Dart에서 enum 을 이용해 열거형을 만들어 타입을 명확히 해보겠습니다!
enum CarType { SUV , SPORTS , COMPACT } // 안에는 타입들을 정의
간단합니다.
enum은 클래스 안에서 정의할 수 없고 class 밖에서 정의하거나 타입들이 상당히 많아지면 따로 파일로 분리해서 리소스를 관리하는 게 유지 보수 측면에서 더 좋다고 생각합니다.
enum Gender { male, female }
class 밖에서 enum타입을 정의해주고 Gender라는 enum 타입으로 Gender.male | Gender.female처럼 사용할 수 있습니다. male을 1 , female을 2라 임의로 의미를 부여하는 것보다 더 코드가 명확해지고 분기처리 하기 수월해졌습니다!
void updateColor(Gender selectedGender) {
if (selectedGender == Gender.male) {
if (maleCardColor == inactiveCardColor) {
maleCardColor = activeCardColor;
femaleCardColor = inactiveCardColor;
} else {
maleCardColor = inactiveCardColor;
}
}
if (selectedGender == Gender.female) {
if (femaleCardColor == inactiveCardColor) {
femaleCardColor = activeCardColor;
maleCardColor = inactiveCardColor;
} else {
femaleCardColor = inactiveCardColor;
}
}
}
// male 카드
Expanded(
child: GestureDetector(
onTap: () {
setState(() {
updateColor(Gender.male);
});
},
child: ReusableCard(
receivedColor: maleCardColor,
cardChild:
IconContent(icon: FontAwesomeIcons.mars, label: 'Male'),
),
),
),
// female 카드
Expanded(
child: GestureDetector(
onTap: () {
setState(() {
updateColor(Gender.female);
});
},
child: ReusableCard(
receivedColor: femaleCardColor,
cardChild:
IconContent(icon: FontAwesomeIcons.venus, label: 'Female'),
),
),
),
삼항 연산자
코드를 작성하다보면 분기 처리를 하다 장황해지는 코드를 볼 수 있습니다. 삼항 연산자를 사용하면 코드의 양을 많이 줄여서 간결한 코드를 유지할 수 있습니다! dart에서도 이런 간결성을 나타내는 삼항 연산자를 제공합니다.
void main(){
bool isChecked = false;
if(isChecked){
print('please check!');
}else{
print('ok! Checked!');
}
}
위의 코드를 삼항연산자로 바꿔봅시다.
void main(){
bool isChecked = false;
isChecked ? print('please check!') : print('ok! Checked!');
}
단 한 줄로 간결하게 리팩토링 할 수 있습니다..
void main(){
int myAge = 18;
bool canBuyDrink = myAge > 20 : ? true : false;
}
또한, 위와 같이 myAge 값에 canBuyDrink라는 변수의 값을 초기화 하는 데에도 삼항 연산자를 통해 조건에 따라서 할당할 수 있습니다. 잘 활용하면 코드량을 더 줄일 수 있을 것 같습니다!
무조건적으로 코드의 양을 줄이는 게 짱이다! 라는 말은 하고 싶지 않습니다. 하지만 누구나 이해할 수 있는 선에서 코드의 양을 조금씩 줄여주면 서로에게 배려되는 코드를 만들 수 있을 거라 생각?합니다.
Map 타입 (자료 구조)
map은 key-value로 이루어진 자료구조입니다. 개발을 하면서 Map 타입이 필요할 때 선별적으로 사용하면 됩니다. 데이터에 라벨링(labeling)을 하는 구조인데 key값을 할당하느라 리소스를 더 사용하게 될 수도 있고 Search하는 데 더 시간이 들 수도 있어서 잘 판별해서 사용하는 게 좋다고 생각합니다
선언
Map < KeyType , ValueType > mapName {
key : value
}
key로 참조.
mapName[key]
ex)
Map< String , int > phoneBook = {
'Jin' : 01055556666,
'James' : 01012345678,
'Tim' : 01098765432
}
main(){
print(phoneBook['Jin']) // output: 01055556666
print(phoneBook['James']) // output: 01012345678
print(phoneBook['Amy']) // output: null
}
'Flutter' 카테고리의 다른 글
[Flutter] Routes 와 Navigation (feat. 멀티스크린) (0) | 2020.12.26 |
---|---|
[Flutter] Flutter에서 Dart 문법(2) - Functions as First Order Objects (2) | 2020.12.19 |
[Flutter] 사용자 동작(제스터)를 감지하는 GestureDetector위젯 (0) | 2020.12.12 |
[Flutter] 정적 이미지 파일 가져오기 (화면에 따른 조정법) (0) | 2020.09.13 |
[Flutter] 디렉토리 구조의 pubspec.yaml 알아보기 (0) | 2020.08.09 |