enum type

김은상·2022년 8월 10일
0
post-thumbnail

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'),
                  ),
                ),
              ),
              
profile
Flutter 시작

0개의 댓글