typedef(타입 별칭)

정의

역할:typedef는 기존 타입에 간결한 별칭을 지정하는 키워드로, 타입 별칭이라고 부릅니다. Dart 2.13 버전부터 모든 타입을 완전 지원하며 이전 버전은 함수 타입만 사용할 수 있었습니다.

문법:typedef 별칭 = 원본타입;

예시:typedef IntList = List<int>; 선언 후에는 List<int> 대신 직접 IntList를 사용할 수 있습니다.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Code language: Dart (dart)

제네릭 매개변수 지원

타입 별칭에 제네릭을 적용해 복잡한 복합 타입을 간소화할 수 있습니다:

typedef ListMapper<X> = Map<X, List<X>>;Code language: Dart (dart)

ListMapper<String>Map<String, List<String>>와 완전히 동일하며 코드가 훨씬 간결하고 읽기 쉬워집니다.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // 장황한 기본 표기
ListMapper<String> m2 = {}; // 동일한 타입이지만 짧고 명확함Code language: Dart (dart)

함수 타입 별칭

함수 시그니처에 별칭을 지정해 전체 코드의 함수 형식을 일관되게 제약할 수 있습니다:

typedef Compare<T> = int Function(T a, T b);Code language: Dart (dart)

(T, T) → int 시그니처에 부합하는 모든 함수는 Compare<T> 타입에 해당하며 is 연산자로 타입 일치 여부를 검사할 수 있습니다.

typedef Compare<T> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // 검사 결과 true
}
Code language: Dart (dart)

실제 사용 예시

// 타입 별칭 정의
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;

void main() {
  // 별칭을 직접 사용
  IntList nums = [10, 20, 30];
  StringMap info = {"name": "dart", "version": "2.18"};

  print(nums);
  print(info);
}Code language: JavaScript (javascript)
// 제네릭 별칭:키는 X, 값은 X타입 배열인 Map
typedef ListMapper<X> = Map<X, List<X>>;

void main() {
  // 기본 긴 표기 방식
  Map<String, List<String>> oldData = {
    "fruit": ["apple", "banana"]
  };

  // typedef 간소화 표기, 타입이 완전 동일
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Code language: Dart (dart)
// 제네릭 함수 별칭:매개변수 T 두 개, 반환값 정수
typedef Compare<T> = int Function(T a, T b);

// Compare<int> 시그니처에 맞는 함수
int intSort(int a, int b) => a - b;
// Compare<String> 시그니처에 맞는 함수
int strSort(String a, String b) => a.length - b.length;

void main() {
  // 타입 검증 실행
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // 함수를 인자로 전달해 활용
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // 출력:[1, 3, 5]
}Code language: Dart (dart)

typedef(타입 별칭)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다