본문 바로가기
프로그래밍

👨‍💻 [Flutter] Flutter 에서 typedef 는 무엇이며, 어떻게 활용할 수 있나요?

by 밝음의기둥 2024. 11. 22.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

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의 장점

  1. 가독성 향상:
    • 복잡한 함수 타입을 간단한 이름으로 정의하여 코드의 가독성을 높일 수 있습니다.
  2. 타입 안정성:
    • 함수 타입을 명확히 정의하여 타입 오류를 줄이고, 디버깅 시간을 단축할 수 있습니다.
  3. 재사용성:
    • 동일한 함수 타입을 여러 곳에서 재사용 가능하므로 코드 중복을 줄입니다.
  4. 유연성:
    • 제네릭 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는 함수 타입을 명확하고 간결하게 정의하는 강력한 도구입니다. 이를 활용하면 콜백 함수, 복잡한 함수 타입, 제네릭 타입 등을 쉽게 다룰 수 있습니다. 가독성과 재사용성을 높이는 데 중요한 역할을 하므로, 프로젝트에서 적극적으로 활용하는 것이 좋습니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형