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
입니다.