Top

Up

Typedefs

Dart에서 문자열과 숫자가 객체인것처럼 함수도 객체 입니다. typedef 또는 function-type alias는 함수 타입에 필드 및 반환 타입을 선언 할 때 사용할 수 있는 이름을 제공합니다. typedef는 함수 타입이 변수에 지정 될 때 타입 정보를 보유합니다.

typedef를 사용하지 않는 다음 코드를 먼저 생각해 보겠습니다.

class SortedCollection {
  Function compare;

  SortedCollection(int f(Object a, Object b)) {
    compare = f;
  }
}

// 초기화, 깨진 구현.
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);

  // 우리가 아는 전부는 compare는 함수라는 것인데,
  // 함수의 타입은 무엇일까요?
  assert(coll.compare is Function);
}

comparef를 대입하면 타입 정보가 유실됩니다. f의 타입은 (Object, Object)int (여기서 →는 반환을 의미)이지만, compare의 타입은 Function입니다. 명시적 이름을 사용하고 타입 정보를 유지하도록 코드를 변경하면 개발자와 도구 모두가 해당 정보를 사용할 수 있습니다.

typedef Compare = int Function(Object a, Object b);

class SortedCollection {
  Compare compare;

  SortedCollection(this.compare);
}

// 초기화, 깨진 구현.
int sort(Object a, Object b) => 0;

void main() {
  SortedCollection coll = SortedCollection(sort);
  assert(coll.compare is Function);
  assert(coll.compare is Compare);
}

Note: 현재 typedef는 함수 타입으로 제한됩니다. 우리는 이것이 변하기를 기대합니다.

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!
}

이전: 격리 (Isolates)

다음: 메타데이터 (Metadata)

문서 변경 이력

2019년 5월 15일: 첫 작성.