inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

typedef를 사용하는이유?

해결된 질문

531

정중한 가자미

작성한 질문수 2

0

이전 강의까지는 상위 class에 method를 생성해서 onTap() 함수를 넘겨줬는데 이번엔 전역으로 typedef로 선언한 이유가 있을까요?

 

typedef ColorIdSetter = void Function(int id);

class _ColorPicker extends StatelessWidget {
  const _ColorPicker({
    super.key,
    required this.colors,
    required this.selectedColorId,
    required this.colorIdSetter,
  });
  final List<CategoryColor> colors;
  final int selectedColorId;
  final ColorIdSetter colorIdSetter;

  @override
  Widget build(BuildContext context) {
    return Wrap(
      runSpacing: 10,
      spacing: 8,
      children: colors
          .map(
            (e) => GestureDetector(
              onTap: () {
                colorIdSetter(e.id);
              },
              child: renderColor(e, selectedColorId == e.id),
            ),
          )
          .toList(),
    );
  }

flutter 클론코딩

답변 1

0

코드팩토리

안녕하세요!

typedef는 함수가 아닙니다. typedef는 함수의 시그니처만 담고 있습니다. (제 Dart 언어 강의 참고해주세요)

함수는 실제 실행 로직을 담고 있는 기능입니다.

typedef는 시그니처만 담고 있기 때문에 일종의 타입으로 사용 될 수 있습니다.

그렇기때문에 당연히도 typedef 타입을 요구하는 값에 말씀하시는 '함수'를 입력 해줄 수 있습니다. (결국 어느 하나가 배제되는 상황 자체가 아닙니다)

감사합니다!

0

정중한 가자미

답변 감사합니다!

제가 궁금한 점은 typedef로 선언하지 않아도 상위 클래스에 method로 선언해서 넘겨줄 수 있는 코드인데 "굳이" typedef로 타입을 정의해서 넘겨준 이유가 궁금한 것 입니다.

기존 방식으로는 상위 클래스에 VoidCallback 메서드를 생성해서 아래로 내려보내려고 했지만 이번엔 typedef로 int id를 매개변수로 받는 함수를 만들고 이를 하위 클래스에서 받게한 이유가 궁금합니다.

1

코드팩토리

VoidCallback 또한 typedef입니다. 추가로 VoidCallback은 아무런 파라미터를 입력받지 않는 함수의 시그니처이기 때문에 이 시나리오에서 사용이 불가능합니다! 그래서 새로 생성한겁니다.

0

정중한 가자미

감사합니다.
voidcallback 정의를 보니 이해가 가네요!

/// Signature of callbacks that have no arguments and return no data.
typedef VoidCallback = void Function();

198강 (){onTap(e);}의 이해 돕기

0

39

1

video_call 플러그인 설치후 에러 발생

0

47

1

SDK 안드로이드 설치 질문!

0

62

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

92

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

70

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

56

1

플레이스토어

0

60

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

56

1

가이드라인 질문

0

58

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

77

1

emulator 실행 오류

0

95

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

72

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

43

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

54

1

video_call 플러그인 설치시 에러문제

0

66

1

children 안의 if 문에서 { } 못쓰는 이유?

0

50

1

이렇게 오류가 떠요

0

66

1

AppBar 사용했는데

0

62

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

58

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

64

1

Video Player 프로젝트에 대한 추가 질문

0

54

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

43

1

geolocator 오류때문에 개발진행이 불가능입니다

0

64

1

API 관련 이슈

0

89

2