Dart / enum extension

restl2seung·2022년 5월 24일
0

Enum이란?

멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.
From. wikipedia

우리가 평소 사용하는 String, Int, Bool 은 대부분 언어에서 미리 정의를 내려 간편하게 사용할 수 있도록 만든 자료형이다.

즉 Enum 은 우리가 커스텀 자료형을 정의할 수 있도록 도와주는 예약어라고 할 수 있다.

대부분 상태(Status : approved, rejected, pending...)를 나타내거나 특정 상수를 반복하여 사용해야 할때 사용된다.

특정 상수를 String 타입으로 코드 전역에 사용하게 되면 실수가 나올 수도 있고 유지보수에 있어 매우 떨어진다.

이때 이를 방지하도록 사용할 수 있는게 enum을 이용한 자료형 정의이다.

아래 코드는 enum 사용 유무에 따라 상태에 따라 print를 찍어 주는 코드이다.

enum Status {
  approved,
  rejected,
  pending
}

void main(){
  
  var currentState = "approved";
  
  switch(currentState) {
    case "approved": 
      print('승인되었습니다.');
      break;
    case "rejected": 
      print('반려되었습니다..');
      break;
    case "pending": 
      print('대기중입니다..');
      break;
  }

==============enum=====================


  var currentState = Status.approved;
  
  switch(currentState) {
    case Status.approved: 
      print('승인되었습니다.');
      break;
    case Status.rejected: 
      print('반려되었습니다..');
      break;
    case Status.pending: 
      print('대기중입니다..');
      break;
  }

}

enum extension이란?

정의한 enum에 확장 method를 적용하여 enum을 더욱 효율적으로 사용할 수 있게 만드는 것이다.

아래 코드는 앞서 설명한 enum 에 대한 코드에서 extension을 추가한 코드이다.

extension을 통해 changeStatusKorean 이라는 확장 함수를 등록했다.

이때의 장점은

  1. 해당 기능을 구현하기 위해 함수로 만들거나, 그냥 구현하기 보다 간편하고 효율적이다.
  2. enum 자효형에 대한 로직 구현에 집중 할 수 있도록 만들어준다.

enum Status {
  approved,
  rejected,
  pending
}

extension stateExtension on Status {
  
  String get changeStatusKorean{
    switch(this) {
      case Status.approved: 
       return '승인되었습니다.';
      case Status.rejected: 
       return '반려되었습니다';
      case Status.pending: 
       return '대기중입니다.';
    }
  }
   
}

void main(){
  
  var currentState = Status.approved;
  
  print(currentState.changeStatusKorean);

}

0개의 댓글