해결된 질문
작성
·
236
0
안녕하세요~!
클래스 생성 vs 함수 생성 관련해서 문의 드립니다. 이미 비슷한 질문에 대한 답변을 다 확인하였는데 여전히 궁금한점이 남아서요.
코드 정리를 할때 어떤때는 함수로 리턴해주고 어떤때는 클래스로 만들어서 build함수에서 리턴을 해주는걸로 알고 있습니다.
질문 1.
코드 정리를 할때 어떤건 함수로, 어떤건 클래스로, 이러한 판단은 상속하고 있는 parent를 모두 확인하고 매번 결정하시는건가요? 강의에서는 바로바로 결정을 하시고 진행하시는데 어떤 판단으로 하시는지 궁금합니다.
질문 2.
AppBar의 경우 PreferredSizeWidget를 구현해야 해서 클래스로 만들수가 없는경우인것은 알겠습니다. 그렇다면 그 외에 구현해야할 부모 클래스가 없다면 모두 class로 만들면 될까요? 가령 Text는 StatelessWidget를 상속받고 있고 Expanded는 Flexible을 상속받고 있습니다.(결국 타고 올라가면 모두 Widget을 상속받고 있습니다). 이런경우 둘다 implement해줘야 할것은 없기에 클래스로 빼도 무관한 걸까요?
다른 분들도 비슷한 질문을 많이 하셨지만 확실히 어떤때는 클래스인지, 어떤때는 함수인지에 대한 부분이 많이 헷갈리고 있습니다.
도와주세요~!!
답변 1
0
안녕하세요.
1) 클래스를 새로 생성해서 (위젯을 새로 생성해서) UI를 구현하면 빌드 사이클이 달라집니다. 각각 자신만의 build() 함수가 생긴다는거죠. 하지만 함수를 사용하는건 어차피 같은 클래스 내부에서 사용하는 build() 함수에 종속 됩니다. 어떻게 코드를 작성하냐에 따라 이게 의미가 있을수도 있고 전혀 의미가 없을수도 있습니다. 예를들면 const로 어떤 한 부분을 선언 할 수 있다면 함수로 선언하는 것 보다 새로운 위젯을 생성하는게 퍼포먼스적으로 유리할겁니다.
2) PreferredSizedWidget을 implement 하시면 마찬가지로 class로 사용이 가능합니다. 다만 implement를 하려면 꼭 override 해줘야하는 함수들이 있기 때문에 귀찮아져서 안하는 것 뿐입니다. 원한다면 충분히 할 수 있습니다.
퍼포먼스적으로 봤을때 함수로 선언하는게 유리한 경우는 없다고 봐도 될 것 같습니다. 다만 새로운 빌드 함수를 가져갈 필요가 없는 경우 더욱 적은 코드를 작성해도 된다는 장점이 있습니다. 메모리 사용 부분에서 조금 차이가 날 수 있지만 플러터 같은 현대적은 프레임워크는 자체적으로 다루는 메모리 관리 정도는 신경 쓰지 않으셔도 됩니다.
감사합니다!