모바일 개발 · 중급
Flutter 애플리케이션의 성능을 최적화하기 위한 방법들을 3가지 이상 제시하고, 각각의 방법이 어떤 원리로 성능 향상에 기여하는지 설명해주세요.
힌트 · 불필요한 리빌드를 줄이고, 위젯 트리의 깊이를 최적화하며, 리스트 뷰와 같은 동적 콘텐츠의 효율적인 렌더링을 고려해야 합니다. `const` 키워드 사용, `RepaintBoundary` 활용, `ListView.builder`가 대표적입니다.
위젯 트리빌드 최적화비동기 처리프로파일링메모리 누수
모범답안
Flutter 애플리케이션 성능 최적화 방법은 여러 가지가 있지만, 중요한 세 가지를 말씀드리겠습니다.
첫째, 불필요한 위젯 리빌드를 줄이는 것입니다. const 키워드를 사용하여 변경되지 않는 위젯을 상수화하면, Flutter는 해당 위젯을 다시 빌드하지 않습니다. 또한, RepaintBoundary 위젯으로 특정 영역을 감싸면, 해당 영역 내부의 변경 사항이 외부 위젯에 영향을 주지 않아 리빌드 범위를 최소화할 수 있습니다.
둘째, 위젯 트리의 깊이를 최적화하는 것입니다. 위젯 트리가 너무 깊으면 렌더링 성능에 영향을 줄 수 있습니다. 불필요한 위젯을 제거하거나, 위젯을 재구성하여 트리의 깊이를 줄일 수 있습니다.
셋째, ListView와 같은 동적 콘텐츠를 효율적으로 렌더링하는 것입니다. ListView.builder를 사용하면 화면에 보이는 부분만 렌더링하므로, 많은 데이터를 가진 리스트를 처리할 때 성능을 크게 향상시킬 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Flutter / Dart 면접 질문
- Flutter의 `InheritedWidget`이 어떻게 작동하는지 설명하고, 상태 관리 패턴에서 어떤 역할을 수행할 수 있는지 구체적인 사용 사례와 함께 설명해주세요.
- Flutter에서 `Key`의 필요성과 중요성에 대해 설명하고, `ValueKey`, `ObjectKey`, `GlobalKey` 각각의 사용 시나리오와 차이점을 예시와 함께 설명해주세요.
- Flutter에서 `StatefulWidget`과 `StatelessWidget`의 생명 주기(Lifecycle)를 비교 설명하고, 각 단계에서 어떤 작업들을 수행할 수 있는지 설명해주세요.
- Dart 언어에서 `Future`와 `Stream`의 차이점을 설명하고, Flutter 앱에서 각각 어떤 상황에 활용될 수 있는지 실제 코드 예시와 함께 설명해주세요.
- Flutter 앱에서 위젯이 화면에 그려지기까지의 전체 렌더링 파이프라인(Build, Layout, Paint, Composite) 과정을 상세히 설명하고, 각 단계에서 발생할 수 있는 성능 병목 현상과 이를 진단하고 최적화하는 방안에 대해 논하시오.
- 기존 위젯으로는 구현하기 어려운 복잡한 UI나 고성능 그래픽 처리가 필요한 경우, Flutter에서 CustomPainter나 CustomMultiChildLayout을 넘어 RenderObject를 직접 구현해야 하는 상황과 그 구현 방법에 대해 설명하십시오. 특히 RenderBox의 performLayout, paint 메서드 오버라이딩 시 주의할 점은 무엇입니까?