inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

class vs 함수 생성

해결된 질문

304

ALAN KIM

작성한 질문수 5

0

안녕하세요~!

클래스 생성 vs 함수 생성 관련해서 문의 드립니다. 이미 비슷한 질문에 대한 답변을 다 확인하였는데 여전히 궁금한점이 남아서요.

 

코드 정리를 할때 어떤때는 함수로 리턴해주고 어떤때는 클래스로 만들어서 build함수에서 리턴을 해주는걸로 알고 있습니다.

 

질문 1.

코드 정리를 할때 어떤건 함수로, 어떤건 클래스로, 이러한 판단은 상속하고 있는 parent를 모두 확인하고 매번 결정하시는건가요? 강의에서는 바로바로 결정을 하시고 진행하시는데 어떤 판단으로 하시는지 궁금합니다.

 

질문 2.

AppBar의 경우 PreferredSizeWidget를 구현해야 해서 클래스로 만들수가 없는경우인것은 알겠습니다. 그렇다면 그 외에 구현해야할 부모 클래스가 없다면 모두 class로 만들면 될까요? 가령 Text는 StatelessWidget를 상속받고 있고 Expanded는 Flexible을 상속받고 있습니다.(결국 타고 올라가면 모두 Widget을 상속받고 있습니다). 이런경우 둘다 implement해줘야 할것은 없기에 클래스로 빼도 무관한 걸까요?

다른 분들도 비슷한 질문을 많이 하셨지만 확실히 어떤때는 클래스인지, 어떤때는 함수인지에 대한 부분이 많이 헷갈리고 있습니다.

 

도와주세요~!!

flutter

답변 1

0

코드팩토리

안녕하세요.

1) 클래스를 새로 생성해서 (위젯을 새로 생성해서) UI를 구현하면 빌드 사이클이 달라집니다. 각각 자신만의 build() 함수가 생긴다는거죠. 하지만 함수를 사용하는건 어차피 같은 클래스 내부에서 사용하는 build() 함수에 종속 됩니다. 어떻게 코드를 작성하냐에 따라 이게 의미가 있을수도 있고 전혀 의미가 없을수도 있습니다. 예를들면 const로 어떤 한 부분을 선언 할 수 있다면 함수로 선언하는 것 보다 새로운 위젯을 생성하는게 퍼포먼스적으로 유리할겁니다.

2) PreferredSizedWidget을 implement 하시면 마찬가지로 class로 사용이 가능합니다. 다만 implement를 하려면 꼭 override 해줘야하는 함수들이 있기 때문에 귀찮아져서 안하는 것 뿐입니다. 원한다면 충분히 할 수 있습니다.

퍼포먼스적으로 봤을때 함수로 선언하는게 유리한 경우는 없다고 봐도 될 것 같습니다. 다만 새로운 빌드 함수를 가져갈 필요가 없는 경우 더욱 적은 코드를 작성해도 된다는 장점이 있습니다. 메모리 사용 부분에서 조금 차이가 날 수 있지만 플러터 같은 현대적은 프레임워크는 자체적으로 다루는 메모리 관리 정도는 신경 쓰지 않으셔도 됩니다.

감사합니다!

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

0

29

1

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

0

46

1

SDK 안드로이드 설치 질문!

0

60

1

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

0

92

1

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

0

70

1

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

0

55

1

플레이스토어

0

59

1

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

0

55

1

가이드라인 질문

0

57

0

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

0

77

1

emulator 실행 오류

0

93

3

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

0

71

1

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

0

43

1

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

0

53

1

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

0

64

1

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

0

48

1

이렇게 오류가 떠요

0

64

1

AppBar 사용했는데

0

61

2

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

0

56

1

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

0

63

1

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

0

53

0

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

0

42

1

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

0

63

1

API 관련 이슈

0

86

2