[Flutter] Flutter에서 Dart 문법 (enum 타입 , 삼항 연산자, Map 타입)

2020. 12. 13. 02:48Flutter

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
}