728x90
Flutter 면접에서 가장 기본적이지만 중요한 개념 중 하나가 클래스 기반 위젯(StatefulWidget, StatelessWidget) vs 함수형 위젯(Function Widget) 입니다.
면접관이 다음과 같은 질문을 던진다면 어떻게 대답해야 할까요?
"왜 클래스 기반 위젯을 함수형 위젯 대신 사용하는 것이 좋은가?"
이 질문은 Flutter의 context, const, 성능 최적화, 위젯 라이프사이클 등 중요한 개념들을 이해하고 있는지를 테스트하기 위한 것입니다.
1️⃣ 클래스 기반 위젯이 더 좋은 이유
1. context 유지 가능
- 클래스 기반 위젯에서는 context가 위젯 인스턴스에 포함되어 있어, 위젯이 재생성되더라도 context를 유지할 수 있습니다.
- 반면, 함수형 위젯은 context가 함수 스코프 내에만 존재하여 동일한 context를 참조하기 어렵습니다.
- 예를 들어, showDialog 호출 시 함수형 위젯에서 context를 전달하면 예상과 다르게 동작할 수 있습니다.
2. const 최적화 가능
- 클래스 기반 위젯에서는 const를 사용할 수 있어 불필요한 리빌드를 방지할 수 있습니다.
- 반면, 함수형 위젯은 매번 새로운 함수 객체가 생성되므로 const 최적화가 어렵습니다.
class MyWidget extends StatelessWidget {
const MyWidget({super.key}); // const 적용 가능
@override
Widget build(BuildContext context) {
return Text('Hello');
}
}
vs
Widget myWidget() { // 함수형 위젯은 const 적용 불가
return Text('Hello');
}
3. 성능 최적화
- 함수형 위젯은 Dart의 클로저(Closure) 특성상 매번 새로운 함수 객체가 생성되기 때문에 성능이 저하될 가능성이 있습니다.
- StatefulWidget과 다르게 함수형 위젯은 특정 상태를 저장할 수 없기 때문에, TextEditingController 같은 객체를 함수형 위젯 내부에서 선언하면 매번 새로운 인스턴스가 생성됩니다.
4. 라이프사이클 사용 가능
- 클래스 기반 위젯은 initState(), dispose() 같은 라이프사이클 메서드를 사용할 수 있어 API 요청, 이벤트 리스너 등록/해제 등 관리가 용이합니다.
- 반면, 함수형 위젯은 이러한 라이프사이클을 직접 다룰 수 없기 때문에 별도의 상태 관리(State Management)가 필요합니다.
2️⃣ 함수형 위젯의 장점은 없을까?
반드시 클래스 기반 위젯만 사용해야 하는 것은 아닙니다. 함수형 위젯이 유용한 경우도 있습니다.
✅ 장점
- 코드가 간결하여 빠르게 UI를 구성할 때 유리함.
- BuildContext를 자주 사용하지 않는 간단한 UI 요소에는 적합.
- 불필요한 상태 관리가 필요 없는 경우 가독성이 좋아짐.
Widget simpleWidget() => Text("Hello World");
✅ 추천 사용 예시
- 단순 UI 컴포넌트 (Text, Icon, Button 등)
- Provider.watch()를 활용하여 상태를 감지하는 경우
3️⃣ 면접에서 추가로 받을 수 있는 질문
면접에서 한 가지 질문에 대한 답변을 하면, 보통 꼬리 질문이 따라옵니다.
아래 질문들에 대한 개념을 이해하고 있으면 면접을 유리하게 진행할 수 있습니다.
1️⃣ BuildContext란 무엇인가?
- 위젯 트리에서 해당 위젯의 위치 및 상위 위젯 정보를 포함하는 객체.
- Theme.of(context), Navigator.of(context), MediaQuery.of(context) 같은 메서드에서 사용됨.
2️⃣ const를 사용하면 어떤 최적화가 가능한가?
- const를 사용하면 위젯이 리빌드되지 않고 재사용 가능하여 성능 최적화에 도움이 됨.
3️⃣ StatefulWidget과 Provider 중 어떤 것이 더 적절한가?
- 단순한 상태 변경이면 StatefulWidget, 전역 상태 관리가 필요하면 Provider가 더 적합.
4️⃣ 결론
면접관의 의도는 단순히 "클래스 vs 함수형"을 묻는 것이 아니라,
Flutter의 기본 개념(context, const, 성능 최적화, 라이프사이클)에 대한 이해도를 평가하려는 것입니다.
✅ 정리하면?
- 클래스 기반 위젯은 context 유지, 성능 최적화, 라이프사이클 관리에 유리함.
- 함수형 위젯은 코드가 간결하고 특정한 경우에는 효율적임.
- 어떤 위젯을 사용할지는 상황에 따라 적절한 선택을 해야 함.
면접에서 이 질문을 받으면, 위 내용을 바탕으로 자신 있게 답변하면 좋을것 같아요 ! 🚀
728x90
LIST
'Flutter' 카테고리의 다른 글
Dart 3.7 업데이트! 개발자들을 위한 최신 포맷팅 스타일 총정리 (4) | 2025.02.14 |
---|---|
Xcode에서 Firebase 설정 후 GoogleService-Info.plist를 찾지 못하는 문제 해결하기 (0) | 2025.02.13 |
Flutter에서 SizedBox.shrink()를 활용하여 빈 공간 추가하는 방법 (1) | 2025.02.07 |
Flutter에서 날짜와 시간 선택 유효성 검사 구현하기 (1) | 2025.01.20 |
Flutter에서 반응형 배너 UI와 애니메이션 구현 (1) | 2025.01.13 |