타입 별칭
타입 별칭 (Type alias)
함수 시그니처만 보아도 타입을 직접 적는 것보다 한 단계 추상화해서 쓰고 싶을 때가 있어요. 타입 별칭은 그럴 때 타입을 가리키는 짧은 이름을 만들어 주는 도구예요. 대부분 typedef 키워드로 선언한다고 해서 흔히 typedef라고 부르기도 하죠.
출처: Dart 공식 문서
본문
타입 별칭은 타입을 가리키는 간결한 방법이에요. IntList라는 이름의 타입 별칭을 선언하고 사용하는 예시를 볼게요.
typedef IntList = List<int>;
IntList il = [1, 2, 3];
타입 별칭은 타입 매개변수도 가질 수 있어요.
typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Verbose.
ListMapper<String> m2 = {}; // Same thing but shorter and clearer.
2.13 버전 이전에는 typedef가 함수 타입으로 제한됐어요. 새 typedef를 쓰려면 언어 버전이 최소 2.13이어야 해요.
대부분의 상황에서는 함수에 대해 typedef 대신 인라인 함수 타입(inline function type) 을 쓰는 걸 권장해요. 다만 함수 typedef가 여전히 유용할 때가 있어요.
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!
}
이 예시에서는 Compare<T>가 두 개의 T를 받아 int를 돌려주는 함수 타입이라는 뜻이에요. sort 함수가 바로 그 형태를 갖고 있으니 sort is Compare<int>가 참이 되는 거죠. 함수 시그니처가 길고 여러 곳에서 반복될 때 이런 typedef가 자리 잡는 이름을 만들어서 코드를 읽기 좋게 해줍니다.