모바일 개발 · 중급
Flutter에서 `StatefulWidget`과 `StatelessWidget`의 생명 주기(Lifecycle)를 비교 설명하고, 각 단계에서 어떤 작업들을 수행할 수 있는지 설명해주세요.
힌트 · StatelessWidget은 build 메서드만 가지지만, StatefulWidget은 `initState`, `didChangeDependencies`, `build`, `didUpdateWidget`, `dispose` 등 다양한 생명 주기 메서드를 통해 상태 변화에 따른 복잡한 로직을 처리할 수 있습니다.
buildinitStatedidUpdateWidgetsetStatedispose
모범답안
네, Flutter에서 StatefulWidget과 StatelessWidget의 생명 주기를 비교 설명하겠습니다.
StatelessWidget은 상태가 변하지 않는 위젯으로, 생명 주기가 단순합니다. build 메서드만 존재하며, 이 메서드에서 UI를 구성합니다. 한 번 생성되면 다시 그려질 때까지 동일한 UI를 유지합니다.
반면 StatefulWidget은 상태 변화에 따라 UI가 업데이트되는 위젯입니다. 더 복잡한 생명 주기를 가집니다.
initState(): 위젯이 처음 생성될 때 딱 한 번 호출됩니다. 초기화 작업을 수행하기에 적합합니다. 예를 들어, 데이터 로딩이나 리스너 등록 등을 할 수 있습니다.didChangeDependencies(): 위젯이 의존하는 데이터가 변경될 때 호출됩니다.InheritedWidget의 변경에 대응하는 로직을 구현할 수 있습니다.build(): UI를 구성하는 메서드입니다. 상태가 변경될 때마다 호출되어 화면을 다시 그립니다.didUpdateWidget(): 위젯의 설정이 변경될 때 호출됩니다. 이전 위젯과 현재 위젯을 비교하여 필요한 업데이트를 수행할 수 있습니다.setState(): UI를 다시 그리도록 Flutter 프레임워크에 알리는 메서드입니다. 이 메서드 호출 후build메서드가 다시 실행됩니다.dispose(): 위젯이 제거될 때 호출됩니다. 리소스 해제, 리스너 해제 등을 수행하여 메모리 누수를 방지합니다.
StatefulWidget은 setState를 통해 상태를 변경하고, 이에 따라 build 메서드가 다시 호출되어 UI를 업데이트하는 방식으로 동작합니다. 이러한 생명 주기 메서드들을 적절히 활용하여 동적인 UI를 구현할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Flutter / Dart 면접 질문
- Flutter에서 `Provider`와 `BLoC/Riverpod`과 같은 상태 관리 솔루션들의 주요 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 적합하다고 생각하시나요? 실제 프로젝트 경험을 바탕으로 비교 설명해주세요.
- Flutter의 `InheritedWidget`이 어떻게 작동하는지 설명하고, 상태 관리 패턴에서 어떤 역할을 수행할 수 있는지 구체적인 사용 사례와 함께 설명해주세요.
- Flutter에서 `Key`의 필요성과 중요성에 대해 설명하고, `ValueKey`, `ObjectKey`, `GlobalKey` 각각의 사용 시나리오와 차이점을 예시와 함께 설명해주세요.
- Flutter 애플리케이션의 성능을 최적화하기 위한 방법들을 3가지 이상 제시하고, 각각의 방법이 어떤 원리로 성능 향상에 기여하는지 설명해주세요.
- Dart 언어에서 `Future`와 `Stream`의 차이점을 설명하고, Flutter 앱에서 각각 어떤 상황에 활용될 수 있는지 실제 코드 예시와 함께 설명해주세요.
- Flutter 앱에서 위젯이 화면에 그려지기까지의 전체 렌더링 파이프라인(Build, Layout, Paint, Composite) 과정을 상세히 설명하고, 각 단계에서 발생할 수 있는 성능 병목 현상과 이를 진단하고 최적화하는 방안에 대해 논하시오.