
void main() {
Operation operation = add;
int result = calculate(10, 20, 30, operation);
print(result); // 60
operation = subtract;
int result2 = calculate(10, 20, 30, operation);
print(result2); // -40
}
typedef Operation = int Function(int x, int y, int z);
int add(int x, int y, int z) => x + y + z;
int subtract(int x, int y, int z) => x - y - z;
int calculate(int x, int y, int z, Operation operation) {
return operation(x, y, z);
}
typedef는 Dart에서 사용자 정의 타입을 선언하는 데 사용됩니다. 특히 함수 시그니처를 명확히 정의하여 코드의 가독성을 향상시키고, 코드의 유지 보수를 용이하게 만들며, 오류를 줄일 수 있도록 도와줍니다.
typedef Operation = int Function(int x, int y, int z);
Operation이라는 새로운 타입을 선언합니다. 이 타입은 세 개의 정수 매개변수를 받고 정수를 반환하는 함수를 나타냅니다.int add(int x, int y, int z) => x + y + z;
Operation 타입과 호환됩니다.int subtract(int x, int y, int z) => x - y - z;
Operation 타입과 호환됩니다.int calculate(int x, int y, int z, Operation operation)
Operation 타입의 함수를 매개변수로 받아, 주어진 함수를 사용하여 연산을 수행하고 결과를 반환합니다.main 함수에서의 사용Operation operation = add;
Operation 타입의 변수 operation을 선언하고, add 함수를 할당합니다.int result = calculate(10, 20, 30, operation);
calculate 함수를 호출하여 operation에 할당된 add 함수를 사용합니다. 결과는 60이고, 이 값은 출력됩니다.operation = subtract;
operation에 subtract 함수를 할당합니다.int result2 = calculate(10, 20, 30, operation);
calculate 함수를 호출하여 이번에는 operation에 할당된 subtract 함수를 사용합니다. 결과는 -40이고, 이 값은 출력됩니다.typedef의 장점가독성: 함수 시그니처를 한 곳에서 선언하고, 이를 사용하여 코드 전체에서 일관된 방식으로 함수를 사용할 수 있습니다.
유지 보수: 함수 시그니처가 변경되어야 하는 경우, typedef 선언만 수정하면 되므로 변경 사항을 쉽게 추적하고 수정할 수 있습니다.
유연성: 다양한 함수를 같은 타입으로 처리할 수 있으며, 필요에 따라 다른 함수를 전달할 수 있습니다.
오류 방지: 컴파일 타임에 타입 검사가 수행되어 잘못된 타입의 함수를 전달하는 실수를 방지할 수 있습니다.
이러한 이점들로 인해 typedef는 Dart 프로그래밍에서 유용하게 사용될 수 있습니다.
typedef ListOfInts = List<int>;
typedef UserInfo = Map<String, String>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversed = list.reversed;
return reversed.toList();
}
String sayHi(UserInfo userInfo) {
return "Hi ${userInfo['name']}";
}
void main() {
print(reverseListOfNumbers([1, 2, 3])); // [3, 2, 1]
print(sayHi({'name': 'joe'})); // Hi joe
}
typedef를 사용하면 Dart에서 사용자 정의 타입을 만들 수 있습니다. 이는 코드의 가독성을 높이고, 타입을 더 명확하게 만들어서 오류를 줄일 수 있습니다.
typedef ListOfInts = List<int>;
ListOfInts라는 새로운 타입을 선언하고, 이를 List<int>에 매핑합니다. 즉, ListOfInts는 정수의 리스트를 나타내는 타입입니다.typedef UserInfo = Map<String, String>;
UserInfo라는 새로운 타입을 선언하고, 이를 Map<String, String>에 매핑합니다. UserInfo는 문자열의 키와 값으로 이루어진 맵을 나타냅니다.ListOfInts reverseListOfNumbers(ListOfInts list)
ListOfInts 타입의 리스트를 받아서 역순으로 된 새 리스트를 반환하는 함수입니다. reversed 프로퍼티를 사용하여 리스트를 뒤집고, toList()를 호출하여 결과를 리스트로 변환합니다.String sayHi(UserInfo userInfo)
UserInfo 타입의 맵을 받아서 사용자의 이름을 인사말과 함께 반환하는 함수입니다. 맵에서 'name' 키에 해당하는 값을 가져와서 문자열 내에 삽입합니다.main 함수에서의 사용print(reverseListOfNumbers([1, 2, 3]));
[1, 2, 3] 리스트를 reverseListOfNumbers 함수에 전달하고, 결과를 출력합니다. 출력된 값은 [3, 2, 1]입니다.print(sayHi({'name': 'joe'}));
{'name': 'joe'} 맵을 sayHi 함수에 전달하고, 결과를 출력합니다. 출력된 값은 Hi joe입니다.