반응형
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
Flutter 에서 typedef 는 무엇이며, 어떻게 활용할 수 있는지 간략히 알아보았습니다.
질문 >
Flutter 에서 typedef 는 무엇이며, 어떻게 활용할 수 있나요?
답변 >
Flutter에서 typedef란?
**typedef*는 Dart에서 제공하는 기능으로, 함수의 **서명(Signature)**에 이름을 부여하여, 함수를 변수처럼 사용할 수 있도록 도와줍니다. 주로 콜백 함수를 정의하거나, 복잡한 함수 타입을 간결하고 가독성 있게 표현할 때 사용됩니다.
typedef의 기본 문법
typedef AliasName = ReturnType Function(ParameterType1, ParameterType2);
- AliasName: 함수 타입의 별칭(이름).
- ReturnType: 함수의 반환 타입.
- Function(ParameterType1, ParameterType2): 함수의 매개변수와 그 타입.
typedef 사용 예제
1. 간단한 typedef 정의
typedef IntOperation = int Function(int a, int b);
int add(int a, int b) => a + b;
int subtract(int a, int b) => a - b;
void main() {
IntOperation operation;
operation = add;
print('Addition: ${operation(3, 2)}'); // Addition: 5
operation = subtract;
print('Subtraction: ${operation(3, 2)}'); // Subtraction: 1
}
설명:
- IntOperation은 두 개의 정수를 받아 정수를 반환하는 함수의 타입을 정의합니다.
- add와 subtract 함수가 모두 IntOperation 타입을 따르므로 operation 변수에 할당 가능합니다.
Flutter에서 typedef 활용
1. 콜백 함수에 typedef 사용
콜백 함수는 주로 버튼 클릭, 사용자 입력, 네트워크 작업 완료 등 이벤트 기반 작업에서 사용됩니다. typedef를 사용하면 콜백 함수의 타입을 명확히 정의할 수 있습니다.
typedef ButtonCallback = void Function(String value);
class CustomButton extends StatelessWidget {
final ButtonCallback onPressed;
CustomButton({required this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () => onPressed("Button Pressed!"),
child: Text('Click Me'),
);
}
}
void main() {
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: CustomButton(
onPressed: (value) => print(value), // Button Pressed!
),
),
),
));
}
설명:
- ButtonCallback은 문자열을 받아 아무것도 반환하지 않는 함수 타입입니다.
- CustomButton 위젯은 onPressed 콜백을 받아 사용합니다.
2. 복잡한 함수 타입 간소화
Flutter에서는 일부 함수 타입이 매우 복잡해질 수 있습니다. typedef를 사용하면 이를 간단하게 표현할 수 있습니다.
typedef FetchDataCallback = Future<list> Function(String url);
Future<list> fetchData(String url) async {
// 네트워크 요청 시뮬레이션
return ['Data1', 'Data2', 'Data3'];
}
void main() async {
FetchDataCallback callback = fetchData;
List data = await callback("<https://api.example.com>");
print(data); // ['Data1', 'Data2', 'Data3']
}
</list</list
설명:
- FetchDataCallback은 특정 URL에서 데이터를 가져오는 함수의 타입을 정의합니다.
- 네트워크 요청을 담당하는 함수의 타입을 간단하게 재사용 가능합니다.
3. typedef와 익명 함수 활용
익명 함수와 함께 사용하여 콜백 함수를 간결하게 정의할 수 있습니다.
typedef StringOperation = String Function(String input);
void performOperation(String input, StringOperation operation) {
print(operation(input));
}
void main() {
performOperation('Flutter', (input) => input.toUpperCase()); // FLUTTER
performOperation('Flutter', (input) => input.toLowerCase()); // flutter
}
설명:
- StringOperation은 문자열을 입력받아 문자열을 반환하는 함수 타입입니다.
- 익명 함수로 대문자 및 소문자 변환 작업을 간단하게 처리했습니다.
4. 제네릭 typedef
typedef는 제네릭을 지원하여 다양한 타입에 유연하게 대응할 수 있습니다.
typedef Transformer<T> = T Function(T input);
T transformValue<T>(T value, Transformer<T> transformer) {
return transformer(value);
}
void main() {
print(transformValue<int>(10, (input) => input * 2)); // 20
print(transformValue<String>('Hello', (input) => '$input World')); // Hello World
}
설명:
- Transformer<T>는 입력값과 동일한 타입의 결과를 반환하는 제네릭 함수 타입입니다.
- 정수와 문자열에 대해 서로 다른 변환 작업을 처리했습니다.
typedef의 장점
- 가독성 향상:
- 복잡한 함수 타입을 간단한 이름으로 정의하여 코드의 가독성을 높일 수 있습니다.
- 타입 안정성:
- 함수 타입을 명확히 정의하여 타입 오류를 줄이고, 디버깅 시간을 단축할 수 있습니다.
- 재사용성:
- 동일한 함수 타입을 여러 곳에서 재사용 가능하므로 코드 중복을 줄입니다.
- 유연성:
- 제네릭 typedef를 사용하면 다양한 데이터 타입에 대해 유연하게 작업할 수 있습니다.
typedef와 Function 키워드의 차이점
- Function 키워드: 함수 타입을 직접 지정하지만, 재사용성이 낮고 가독성이 떨어질 수 있습니다.
void performTask(Function(String) callback) {
callback('Hello');
}
- typedef: 재사용 가능하고, 명확한 타입 정의를 제공합니다.
typedef StringCallback = void Function(String message);
void performTask(StringCallback callback) {
callback('Hello');
}
결론
Flutter에서 typedef는 함수 타입을 명확하고 간결하게 정의하는 강력한 도구입니다. 이를 활용하면 콜백 함수, 복잡한 함수 타입, 제네릭 타입 등을 쉽게 다룰 수 있습니다. 가독성과 재사용성을 높이는 데 중요한 역할을 하므로, 프로젝트에서 적극적으로 활용하는 것이 좋습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
🎬 유튜브 채널 🎬
🎬 치지직 채널 🎬
반응형
'프로그래밍' 카테고리의 다른 글
👨💻 [Unreal] 언리얼 엔진에서 FTimerManager 는 무엇이며, 어떻게 활용할 수 있나요? (0) | 2024.11.25 |
---|---|
👨💻 [Flutter] Flutter 에서 윈도우 플랫폼의 새창은 어떻게 생성하나요? (0) | 2024.11.22 |
👨💻 [Socket.IO] Socket.IO 프로토콜 이란 무엇인가요? (3) | 2024.11.21 |
👨💻 [Flutter] Flutter 에서 socket_io_client 활용 방법은 어떻게 되나요? (1) | 2024.11.21 |
👨💻 [Cloud] 파이어베이스 (Firebase) 와 슈파베이스 (Supabase) 의 장단점을 비교해주세요. (3) | 2024.11.20 |