2 minute read

1. Enum

Enum은 열거형 타입이라고 해서 서로 연관된 상수를 모아놓은 집합이다. 2.17 버전 이후 기능이 향상되면서 Enum 타입을 데이터를 갖는 클래스처럼 사용할 수 있게 되었다.

ex) Enum 사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum Status {
  PENDING, // 대기
  APPROVED, // 승인
  REJECTED // 거절
}

void main() {
  Status status = Status.PENDING;
  switch (status) {
    case Status.PENDING:
      print('대기중입니다.');
      break;
    case Status.APPROVED:
      print('승인되었습니다.');
      break;
    case Status.REJECTED:
      print('거절되었습니다.');
      break;
    default:
      print('알수없는 상태입니다.');
      break;
  }
}

enum을 선언하고 상수를 정의한다. status 상태 값에 따라 내용이 출력된다.

위 내용만 보면 그냥 String을 사용해도 무관해보인다. 그럼 enum을 사용하는 이유는 무엇일까?

  • Enum을 사용하면 얻을 수 있는 장점

  • 가독성이 높아진다.
  • 인스턴스 생성과 상속을 방지하고 상수 값의 타입에 대한 안정성을 보장한다.
  • 상태와 행위에 대한 정의 및 관리가 명확해진다.

위의 예시 코드로 봤을 때 enum을 사용하면 정확히 대기, 승인, 거절에 대한 상태만 존재한다는 걸 쉽게 확인할 수 있고 내가 아닌 다른 개발자들도 코드에 대한 빠른 이해가 가능하다.

또한 단순 String으로 코드를 작성할 경우 오타가 나서 발생하는 오류도 방지할 수 있게 된다.



2. typedef

Dart에서는 함수 타입을 정의하기 위해 typedef를 사용한다. typedef를 사용하게 되면 함수의 타입을 명확히 표현할 수 있어 가독성이 높아지고, 특정 타입을 가진 함수를 많이 사용하는 경우 간결하게 코드를 작성할 수 있다는 장점이 있다.

하지만 typedef를 사용할 때 명시적으로 타입을 정의해야 하기 때문에 개발자가 추가적인 코드를 작성해야 할 수 도 있다.

ex)typedef 사용예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// signature
typedef Operation  = inf Funtion(int x, int y, int z);

// 더하기
int add(int x, int y, int z) => x + y + z;

// 빼기
int sub(int x, int y, int z) => x - y - z;

// 계산
int cal(int x, int y, int z, Operation operation){
  return operation(x, y, z);
};

//ex. 
void main(){
  Operation operation = add;
  int result = operation(10,20,30);
  print(result);    //result : 60

  Operation operation = sub;
  int result = operation(10,20,30);
  print(result);    //result : -40

  int result = operation(10,20,30,cal);
  print(result);    //result : -40
}
  • typedef => typedef를 사용하면 함수의 타입을 명확하게 표현할 수 있어 가독성이 높아지고, 특정 타입을 가진 함수를 많이 사용하는 경우 간결한 코드를 작성할 수 있다. => typedef를 사용하면 함수의 타입을 명확하게 표현할 수 있어 가독성이 높아집니다. 또한, 특정 타입을 가진 함수를 많이 사용하는 경우 간결한 코드를 작성할 수 있습니다. 하지만, typedef를 사용할 때 명시적으로 타입을 정의해야 하므로 개발자가 추가적인 코드를 작성해야 할 수도 있습니다.