Dart 신입 성능 최적화 기술면접

Dart 신입 · 취준 (0~1년) 성능 최적화 7문항 조회수 17 · 2026-08-21 (금) 17:41:07
1 렌더링 최적화
Easy

Q. Flutter 앱에서 위젯이 불필요하게 다시 빌드되는 것을 확인하려면 어떤 도구나 방법을 사용할 수 있나요?

Flutter DevTools에서 제공하는 페인팅 관련 기능을 떠올려보세요.

A. 모범답안

Flutter DevTools의 Performance 탭에서 'Repaint Rainbow'를 활성화하면 위젯이 다시 그려질 때마다 색상이 변경되어 불필요한 리빌드를 시각적으로 확인할 수 있습니다. 또한 'Paint Flashing'을 켜면 페인팅이 발생하는 영역을 하이라이트로 표시합니다. 코드 레벨에서는 debugPrint를 build 메서드 안에 넣어 빌드 횟수를 로그로 확인할 수도 있습니다. 이러한 도구들을 통해 성능 병목을 파악하고 const 생성자나 StatelessWidget 사용 등의 최적화를 적용할 수 있습니다.

핵심 포인트
  • • Flutter DevTools 활용
  • • Repaint Rainbow로 리빌드 시각화
  • • debugPrint로 빌드 횟수 추적
  • • 최적화 방향 파악
답변에 넣으면 좋은 키워드
Flutter DevTools Repaint Rainbow Paint Flashing 리빌드 성능 프로파일링
실무에서는

복잡한 UI를 가진 앱에서 스크롤 성능 저하 원인을 찾을 때 사용됩니다.

Follow-up 질문

불필요한 리빌드를 방지하기 위해 const 생성자를 사용하는 것이 왜 효과적인지 설명해주세요.

2 메모리 최적화
Easy

Q. Dart에서 리스트를 다룰 때 메모리 효율을 높이기 위해 List.generate와 일반 for 루프 중 어떤 것을 선택해야 하며, 그 이유는 무엇인가요?

리스트의 크기를 미리 알고 있을 때와 모를 때의 차이를 생각해보세요.

A. 모범답안

리스트의 크기를 미리 알고 있다면 List.generate를 사용하는 것이 메모리 효율적입니다. List.generate는 초기 용량을 미리 할당하여 동적 확장에 따른 재할당 오버헤드를 줄입니다. 반면 빈 리스트에 for 루프로 add를 반복하면 내부 배열이 가득 찰 때마다 더 큰 배열로 복사하는 작업이 발생합니다. 따라서 고정된 크기의 데이터를 생성할 때는 List.generate나 List.filled를 사용하는 것이 좋습니다.

핵심 포인트
  • • List.generate는 초기 용량 할당
  • • 동적 확장 시 재할당 오버헤드
  • • 고정 크기 데이터는 미리 할당
  • • 메모리 효율성 향상
답변에 넣으면 좋은 키워드
List.generate 메모리 할당 재할당 List.filled 용량 최적화
실무에서는

대량의 데이터를 처리하거나 리스트 변환 작업이 빈번한 앱에서 메모리 사용량을 줄일 때 적용됩니다.

Follow-up 질문

큰 리스트를 처리할 때 Iterable의 lazy evaluation이 메모리 측면에서 어떤 이점이 있나요?

3 렌더링 최적화
Medium

Q. Flutter 앱에서 긴 리스트를 표시할 때 ListView.builder를 사용하는 것이 ListView에 children을 직접 전달하는 것보다 성능상 유리한 이유를 설명해주세요.

화면에 보이지 않는 위젯들을 어떻게 처리하는지 생각해보세요.

A. 모범답안

ListView.builder는 lazy loading 방식으로 화면에 실제로 보이는 항목만 빌드하고 렌더링합니다. 사용자가 스크롤할 때 필요한 위젯만 동적으로 생성하므로 초기 메모리 사용량과 빌드 시간이 크게 줄어듭니다. 반면 children을 직접 전달하면 모든 위젯을 한 번에 생성하여 메모리에 올리므로 리스트가 길어질수록 초기 로딩이 느려지고 메모리 부담이 커집니다. 따라서 동적이거나 긴 리스트에는 항상 ListView.builder나 ListView.separated를 사용해야 합니다.

핵심 포인트
  • • lazy loading으로 필요한 항목만 빌드
  • • 화면에 보이는 위젯만 렌더링
  • • 초기 메모리 사용량 감소
  • • 스크롤 성능 향상
답변에 넣으면 좋은 키워드
ListView.builder lazy loading viewport 메모리 효율 스크롤 성능
실무에서는

소셜 미디어 피드나 상품 목록처럼 수백 개 이상의 항목을 표시하는 화면에서 필수적으로 사용됩니다.

Follow-up 질문

ListView.builder 대신 CustomScrollView와 SliverList를 사용하는 경우는 언제인가요?

4 비동기 처리 최적화
Medium

Q. 여러 개의 API 호출이 서로 독립적일 때, 순차적으로 await를 여러 번 사용하는 것과 Future.wait를 사용하는 것의 성능 차이를 설명해주세요.

병렬 처리와 순차 처리의 시간 차이를 생각해보세요.

A. 모범답안

순차적으로 await를 사용하면 첫 번째 API 응답을 받은 후에야 두 번째 API를 호출하므로 총 실행 시간이 각 호출 시간의 합이 됩니다. 반면 Future.wait는 모든 API를 동시에 호출하고 모든 응답을 기다리므로 총 실행 시간이 가장 긴 호출 시간과 같아집니다. 예를 들어 각각 2초 걸리는 3개의 독립적인 API가 있다면 순차 처리는 6초, Future.wait는 약 2초가 걸립니다. 따라서 서로 의존성이 없는 비동기 작업은 Future.wait로 병렬 처리하는 것이 성능상 훨씬 유리합니다.

핵심 포인트
  • • 순차 처리는 시간이 누적됨
  • • Future.wait는 병렬 처리로 동시 실행
  • • 독립적인 작업은 병렬화
  • • 응답 시간 대폭 단축
답변에 넣으면 좋은 키워드
Future.wait 병렬 처리 비동기 await API 호출 최적화
실무에서는

앱 초기 화면에서 사용자 정보, 설정, 알림 등 여러 데이터를 동시에 불러올 때 로딩 시간을 줄이는 데 사용됩니다.

Follow-up 질문

Future.wait 사용 시 하나의 API가 실패하면 어떻게 처리해야 하나요?

5 캐싱 전략
Medium

Q. 네트워크에서 가져온 이미지를 Flutter 앱에서 효율적으로 캐싱하려면 어떤 방법을 사용할 수 있으며, 캐싱이 성능에 미치는 영향은 무엇인가요?

Flutter에서 제공하는 이미지 위젯과 외부 패키지의 캐싱 기능을 생각해보세요.

A. 모범답안

Flutter의 Image.network는 기본적으로 메모리 캐싱을 제공하지만 디스크 캐싱은 지원하지 않습니다. cached_network_image 패키지를 사용하면 메모리와 디스크 양쪽에 이미지를 캐싱하여 네트워크 요청을 줄일 수 있습니다. 캐싱을 사용하면 같은 이미지를 다시 표시할 때 네트워크 요청 없이 로컬에서 즉시 로드되어 로딩 시간이 단축되고 데이터 사용량이 감소합니다. 또한 오프라인 상황에서도 캐시된 이미지를 표시할 수 있어 사용자 경험이 향상됩니다.

핵심 포인트
  • • 메모리와 디스크 캐싱 구분
  • • cached_network_image 패키지 활용
  • • 네트워크 요청 감소
  • • 로딩 시간 단축 및 데이터 절약
답변에 넣으면 좋은 키워드
cached_network_image 이미지 캐싱 메모리 캐시 디스크 캐시 네트워크 최적화
실무에서는

SNS 피드나 쇼핑몰 앱처럼 많은 이미지를 반복적으로 표시하는 화면에서 필수적으로 사용됩니다.

Follow-up 질문

캐시된 이미지가 너무 많아져서 디스크 공간을 많이 차지하면 어떻게 관리해야 하나요?

6 연산 최적화
Medium

Q. Flutter 앱에서 복잡한 JSON 파싱이나 이미지 처리 같은 무거운 연산을 수행할 때 UI가 멈추는 문제가 발생했습니다. 이를 해결하기 위한 방법을 설명해주세요.

메인 스레드와 별도의 스레드를 활용하는 방법을 생각해보세요.

A. 모범답안

Dart의 compute 함수를 사용하여 무거운 연산을 별도의 isolate에서 실행할 수 있습니다. Flutter는 단일 스레드 모델이므로 메인 isolate에서 무거운 작업을 수행하면 UI 렌더링이 블로킹되어 화면이 멈춥니다. compute를 사용하면 별도의 isolate에서 연산을 수행하고 결과만 메인 isolate로 전달하여 UI 응답성을 유지할 수 있습니다. 예를 들어 큰 JSON 데이터를 파싱하거나 이미지를 리사이징할 때 compute를 활용하면 앱이 버벅거리지 않고 부드럽게 동작합니다.

핵심 포인트
  • • compute 함수로 별도 isolate 활용
  • • 메인 스레드 블로킹 방지
  • • UI 응답성 유지
  • • 무거운 연산 분리
답변에 넣으면 좋은 키워드
compute isolate 백그라운드 처리 JSON 파싱 UI 블로킹
실무에서는

대용량 데이터 처리나 복잡한 계산이 필요한 앱에서 UI 프리징을 방지하는 데 사용됩니다.

Follow-up 질문

isolate 간에는 메모리를 공유할 수 없는데, 큰 데이터를 전달할 때는 어떻게 해야 하나요?

7 빌드 최적화
Easy

Q. Flutter 앱의 빌드 시간이 너무 오래 걸릴 때, 개발 단계에서 빌드 속도를 개선하기 위해 시도해볼 수 있는 방법들을 설명해주세요.

핫 리로드, 의존성, 그리고 빌드 캐시와 관련된 방법들을 떠올려보세요.

A. 모범답안

먼저 전체 재빌드 대신 핫 리로드나 핫 리스타트를 적극 활용하여 빠르게 변경사항을 확인할 수 있습니다. pubspec.yaml에서 사용하지 않는 패키지를 제거하면 의존성 분석 시간이 줄어듭니다. flutter clean 후 다시 빌드하면 손상된 캐시가 정리되어 빌드 문제가 해결되기도 합니다. 또한 Android Studio나 VS Code의 빌드 캐시를 활용하고, 개발 중에는 release 모드 대신 debug 모드를 사용하면 최적화 과정이 생략되어 빌드가 빨라집니다.

핵심 포인트
  • • 핫 리로드 활용
  • • 불필요한 패키지 제거
  • • flutter clean으로 캐시 정리
  • • debug 모드 사용
답변에 넣으면 좋은 키워드
핫 리로드 flutter clean 빌드 캐시 의존성 최적화 debug 모드
실무에서는

개발 생산성을 높이고 반복 작업 시간을 단축하여 빠른 피드백 루프를 만드는 데 중요합니다.

Follow-up 질문

프로덕션 빌드 시간을 줄이기 위한 방법은 개발 빌드와 어떻게 다른가요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!