typedef 키워드는 함수의 시그니처를 정의하는 값으로 보면 된다.
여기서 시그니처는 반환 값 타입, 매개변수 개수와 타입 등을 말한다.
즉 함수 선언부를 정의하는 키워드이다. 함수가 무슨 동작을 하는지에 대한 로직은 없다.
typedef Operation = void Function(int x, int y);
함수를 선언하기는 했지만 그 함수에대한 로직이 없다.
void add(int x, int y) {
return ('결과값 : ${x + y}');
}
void subtract(int x, int y) {
return ('결과값 : ${x - y}');
}
void main() {
// typedef 는 일반적인 변수의 type 처럼 사용가능하다.
Operation oper = add;
oper(1,2);
// subtract() 함수도 Operation에 해당되는 시그니처이므로 oper에 저장 가능하다.
oper = subtract;
oper(1,2);
}
다트에서 함수는 일급 객체(First-class cirizen)이므로 함수를 값처럼 사용할 수 있다.
그래서 플러터에서는 typedef(으)로 선언한 함수를 다음과 같이 매개변수로 넣어 사용한다.
void calculate(int x, int y, Operation oper) {
oper(x,y);
}
void main() {
calculate(1, 2, add); // 결괏값: 3
}
calculate() 함수의 3번째 매개변수로 add() 함수를 넣은 결괏값이다.