모바일 개발 · 중급
Dart 언어에서 `Future`와 `Stream`의 차이점을 설명하고, Flutter 앱에서 각각 어떤 상황에 활용될 수 있는지 실제 코드 예시와 함께 설명해주세요.
힌트 · Future는 단일 비동기 결과를 처리하는 반면, Stream은 시간의 흐름에 따라 여러 비동기 이벤트를 처리합니다. 네트워크 요청에는 Future, 실시간 데이터(채팅, 센서 데이터)에는 Stream이 적합합니다.
비동기단일 값다중 값awaitasync*
모범답안
면접관님, Dart에서 Future와 Stream은 모두 비동기 프로그래밍을 위한 도구이지만, 처리하는 데이터의 성격에 차이가 있습니다.
Future는 미래에 완료될 작업의 결과를 나타냅니다. 단 한 번의 값을 반환하죠. 예를 들어, 서버에 데이터를 요청하고 응답을 받는 경우에 Future를 사용합니다. await 키워드를 사용하여 결과를 기다릴 수 있습니다.
반면 Stream은 시간의 흐름에 따라 여러 개의 데이터를 순차적으로 방출하는 비동기 데이터의 흐름입니다. 실시간으로 업데이트되는 데이터, 예를 들어 센서 데이터나 채팅 메시지를 처리할 때 유용합니다. async* 키워드를 사용하여 Stream을 생성할 수 있습니다.
Flutter 앱에서 Future는 HTTP 요청, 데이터베이스 쿼리 등 한 번만 실행되는 비동기 작업에 사용되고, Stream은 Firebase의 실시간 데이터베이스 변경 감지, WebSocket을 통한 실시간 데이터 수신 등에 활용될 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Flutter / Dart 면접 질문
- Flutter에서 `Key`의 필요성과 중요성에 대해 설명하고, `ValueKey`, `ObjectKey`, `GlobalKey` 각각의 사용 시나리오와 차이점을 예시와 함께 설명해주세요.
- Flutter에서 `StatefulWidget`과 `StatelessWidget`의 생명 주기(Lifecycle)를 비교 설명하고, 각 단계에서 어떤 작업들을 수행할 수 있는지 설명해주세요.
- Flutter 애플리케이션의 성능을 최적화하기 위한 방법들을 3가지 이상 제시하고, 각각의 방법이 어떤 원리로 성능 향상에 기여하는지 설명해주세요.
- Flutter 앱에서 위젯이 화면에 그려지기까지의 전체 렌더링 파이프라인(Build, Layout, Paint, Composite) 과정을 상세히 설명하고, 각 단계에서 발생할 수 있는 성능 병목 현상과 이를 진단하고 최적화하는 방안에 대해 논하시오.
- 기존 위젯으로는 구현하기 어려운 복잡한 UI나 고성능 그래픽 처리가 필요한 경우, Flutter에서 CustomPainter나 CustomMultiChildLayout을 넘어 RenderObject를 직접 구현해야 하는 상황과 그 구현 방법에 대해 설명하십시오. 특히 RenderBox의 performLayout, paint 메서드 오버라이딩 시 주의할 점은 무엇입니까?
- Flutter 애플리케이션에서 무거운 연산이나 네트워크 요청 등으로 인해 UI 스레드가 블록되는 상황을 방지하기 위해 Dart의 Isolate를 활용하는 방법을 설명하십시오. Isolate 간의 데이터 통신 메커니즘과, Isolate 사용 시 발생할 수 있는 잠재적인 문제점(예: 메모리 오버헤드, 데이터 복사 비용) 및 그 해결 전략에 대해 논하십시오.