Flutter 인터뷰 정리
Flutter 인터뷰 정리
올해 진행된 소프트웨어 마에스트로(SW Maestro.) 과정에 운좋게 선정되었는데 팀 내에서 Flutter 개발을 담당하게 될 것 같아 우선 먼저 Flutter에 대해 공부하려고 한다.
작년에 공부한 내용 복습겸 기본적인 개념 이해 겸 해서 작성하는 글!
1. 플러터(Flutter)란?
Google에서 개발한 Flutter는 크로스 플랫폼 모바일 앱 개발 프레임워크이다. 여기서 크로스 플랫폼 이란 하나의 프레임워크로(언어로) 안드로이드, IOS 모두 개발 가능한 것을 의미하며, Flutter의 경우 웹과 데스크탑 앱도 개발 가능하다.(이게 내가 Flutter를 선택한 이유이다)
2. 플러터의 장점은?
- 코드 개발 감소 : Flutter의 핫 리로드 기능을 통해 더 빠른 성능을 제공한다. 이를 통해 응용 프로그램은 arm C/C++ 라이브러리를 사용하여 컴파일되어 기계 코드에 더 가까워지고 더 빠르게 실행 가능하다.
- 교차 플랫폼 개발 : Flutter를 사용하면 여러 플랫폼에서 코드를 작성하고 관리하고 실행할 수 있다.
- 라이브 및 핫 리로딩 : 앱 개발 프로세스를 더 간단하고 빠르게 만든다.
- 네이티브 앱 성능과 유사 : 대부분의 크로스 플랫폼 프레임워크와 달리 Flutter는 중간 코드 표현이나 해석에 의존하지 않는다. Flutter 애플리케이션은 기계 코드에 직접 내장되어 해석 프로세스와 관련된 성능 문제를 제거합니다.(물론 네이티브보다 성능이 더 좋지는 못한다.)
- 좋은 커뮤니티 지원 : 개발자는 문제에 대해 질문하고 신속하게 답변을 얻을 수 있습니다.(하지만 아직 커뮤니티가 작은것도 사실이다.)
- 문서: Flutter의 문서는 정말 잘 정리되어있고 친절하다. 내가 본 문서중에서도 탑급이다.
- 표현력 있고 유연한 UI : Flutter는 고도로 사용자 정의 가능한 디자인, 표현력이 풍부한 UI 및 빠른 렌더링을 허용하는 다양한 아키텍처를 제공한다.
3. 플러터 아키텍쳐를 설명하시오
-
상위 계층 : 앱 위젯, 제스처, 애니메이션, 일러스트레이션 및 자료를 관리하는 Dart 기반 플랫폼
-
Flutter 엔진 : 텍스트의 표시 및 서식 지정을 처리
-
빌트인 서비스 : 플러그인, 패키지, 이벤트 루프 관리에 사용됨.
4. 플러터의 중요한 특징들
- 유연성, 확장성 및 통합: Flutter의 사용하기 쉽고 통합하기 쉬운 프레임워크는 향상된 유연성, 확장성 및 통합 기능을 제공
- 핫 리로드: 개발자가 코드를 수정하면 핫 리로드로 변경 사항을 즉시 확인할 수 있다.
- 원스톱 솔루션: Flutter 앱 개발은 개발, 배포 및 관리를 위한 단일 프레임워크와 플랫폼에 의존한다.
- 기본 성능 및 국제화된 Flutter 라이브러리: Flutter 앱 개발은 Android, iOS 및 Google Fuchsia용으로 맞춤화된 위젯을 제공하며 위젯을 사용하면 스크롤, 내비게이션, 아이콘, 글꼴 등 플랫폼의 모든 기능이 통합가능하다.
- 거대한 위젯 라이브러리: 거의 모든것이 위젯인 Flutter, 위젯이 겁나게 많다.
5. 플러터의 한계
- 라이브러리의 제한 : Flutter는 비교적 새롭기 때문에 타사 라이브러리에 비해 수가 적다.
- 릴리스 크기가 더 큼 : 확실히 릴리즈의 용량이 큰편이다.
- Dart의 요구 사항 : Flutter를 위해 족보도 없는 Dart를 공부해야 한다.(하지만 다트 문법 자체가 여러 언어 짬뽕이라 큰 단점이라 느끼지는 않았다.)
- 복잡성 제한 : Flutter의 3D 모델링, Unity 통합 및 게임 엔진이 부족하고 대부분의 광고 모바일 플랫폼도 지원하지 않습니다.
- 전반적인 지원 부족 : Flutter는 아직 널리 사용되지 않고있다. 기술 애호가들의 관심을 받고 있지만 시간이 지남에 따라 제공될 지속적인 지원은 여전히 부족한 상황
6. 플러터의 빌드시 모드들의 차이
- 디버그 모드 : 이 모드에서는 물리적 장치, 에뮬레이터 또는 시뮬레이터에서 앱을 디버깅할 수 있으며 어설션 및 서비스 확장이 여기에서 활성화됩니다.
- 프로필 모드 : 이 모드에서는 테스트하는 동안 앱의 성능을 분석하기에 충분한 디버깅 기능이 유지되며 추적 및 일부 확장이 활성화됩니다. 에뮬레이터 및 시뮬레이터에서는 해당 동작이 실제 성능을 재현하지 않기 때문에 프로필 모드가 비활성화된다.
flutter run --profile
- Release Mode : 앱을 배포할 때 Footprint의 크기를 최소화하고 최적화를 최대화하기 위해 이 모드를 사용하며 디버깅, 어설션 및 서비스 확장이 비활성화된다.
flutter run --release
7. 플러터의 위젯의 중요성을 설명하세요.
일반적으로 Flutter 앱은 여러 위젯으로 구성됩며 보이는 부분은 거의 다 위젯이다. 그만큼 위젯의 활용법이 무궁무진하다.
8. 플러터 위젯의 종류는 무엇인가요.
- Stateless Widget : 본질적으로 정적이며 상태를 저장하지 않는다. 따라서 변경될 수 있는 값을 저장하지 않는다.
- Stateful Widget : 상태 저장 위젯은 본질적으로 동적이므로 변경 사항을 모니터링하고 이에 따라 UI를 업데이트할 수 있다.
9. Dart의 중요성과 의미는 무엇인가요.
Google에서 개발한 프로그래밍 언어인 Dart는 Flutter 앱과 서버 및 데스크톱 애플리케이션을 코딩하는 데 사용된다. Flutter는 Dart를 사용하여 JSX 또는 XML과 같은 별도의 선언적 레이아웃 언어를 사용하지 않는다.
10. State에 대해서 설명하세요.
state는 공유 상태 또는 애플리케이션 상태라고도 하며, 앱 섹션 간에 앱 상태를 공유하고 동일한 방식으로 사용자 세션을 유지할 수 있습니다.
11. runApp()과 main()의 차이는 무엇인가요.
-
main(): 프로그램의 최초 시작점이다.
-
runApp(): runApp()을 사용하면 화면에 렌더링될 위젯 트리의 루트로 화면에 연결된 위젯을 반환할 수 있다.
12. 플러터에서의 Package와 plugins를 설명하세요.
- 플러그인: 네이티브 코드를 사용하여 사용성을 높이고 장치를 더 쉽게 사용할 수 있다.
- 패키지: dart 프로그래밍 언어로 작성된 새로운 코드 또는 구성 요소이다.
13. 플러터 개발을 위한 에디터는 무엇이 있나요?
- 안드로이드 스튜디오 - 1순위 인것 같다.
- 비주얼 스튜디오
- IntelliJ IDEA
- Xcode
- Emacs
- Eclipse
- Vim 등
14. 플러터를 사용한 유명한 앱들은 무엇이 있나요?
- Google Ads
- Alibaba
- Tencent
- 국내에는 스타트업 위주로 사용되는 중
15. 플러터에서 Key는 무슨 뜻인가요? 언제 사용해야 하나요?
키는 Flutter에서 위젯, 요소 및 시맨틱 노드의 식별자로 사용되며 GlobalKeys 및 LocalKeys는 Key의 하위 클래스이다. 위젯 트리 내에서 키는 수정된 위젯의 상태를 유지하는 역할을 하고, 키를 사용하면 동일한 유형 및 정의된 상태가 있는 위젯 모음을 재구성하고 수정할 수도 있다.
16. Container 위젯을 설명하세요
가장 만만한 위젯으로 하위 위젯 수용, 크기, 패딩, 마진, 색, 모양 등등 거의 제약 없이 사용 가능하며 어떤 위젯 써야 할 지 모르겠다 싶을때 쓰는 위젯이다.(거의 다 가능)
17. 플러터와 리액트네이티브중 무엇이 더 훌륭한가요?
어떤 것이 더 훌륭하냐는 질문은 답이 없는 질문이다. 사람에 따라 답이 달라지기 때문.
최대한 객관적으로 말하자면 현재는 react native가 우세라고 생각한다. 하지만 이미 커뮤니티나 관심도 수치는 플러터가 리엑트를 뛰어 넘었고 몇년 뒤면 플러터가 대세로 사용될거라 생각된다.
18. mainAxisAlignment 와 crossAxisAlignment는 언제 사용하나요?
행, 열에 대한 정렬을 정의하는 속성이다.
행의 경우:
- mainAxisAlignment = 가로 축
- crossAxisAlignment = 세로 축
열의 경우:
- mainAxisAlignment = 세로 축
- crossAxisAlignment = 가로 축
19. 왜 플러터앱은 개발 기간이 긴가요?
Flutter 애플리케이션을 처음 빌드할 때 Flutter가 기기별 IPA 또는 APK 파일을 생성하므로 평소보다 훨씬 오래 걸린다. Xcode와 Gradle을 사용하여 일반적으로 시간이 많이 걸리는 파일을 빌드합니다.
20. 플러터 Inspector에 대해 설명하세요.
Android와 마찬가지로 XML 파일을 통해 앱의 청사진 및 속성을 볼 수 있다. 위젯과 그 속성의 청사진을 시각화할 수 있는 Flutter 애플리케이션용 Flutter Inspector라는 강력한 도구가 있으며 이를 활용하여 다양한 레이아웃 문제를 진단하고 현재 레이아웃을 이해할 수 있습니다.
Flutter Inspector는 다음과 같은 이점:
- 위젯 모드 선택
- 플랫폼 전환
- 페인트 기준선 표시
- 디버그 페인트 표시
- 새로 고침 위젯
- 느 린 애니메이션 활성화
- 성능 오버레이 표시/숨기기
21. 플러터 Ticker의 용도는 무엇인가요?
Flutter에서 애니메이션이 얼마나 자주 새로고침되는지 알려주기 위해 티커를 사용한다.
22. 디버그 모드에서만 코드를 실행하는 방법은 무엇인가요.
아래 코드를 통해 디버그서버/릴리즈 서버를 구분하여 개발을 진행하기도 한다.
import 'package:flutter/foundation.dart' as Foundation;
The next step is to use kReleaseMode as follows:
if (Foundation.kReleaseMode){ // is Release Mode??
print('release mode');
} else {
print('debug mode');
}
23. Mixins의 용도
거지같은 Dart는 다중 상속을 지원하지 않는다. 따라서 Flutter/Dart에서 다중 상속을 구현할 때 믹스인이 사용된다.
24. Stream은 무슨 뜻인가요?
비동기 프로그래밍에서 스트림은 비동기 방식으로 데이터 시퀀스를 제공하는 데 사용된다. 파이프와 마찬가지로 한쪽 끝에 값을 입력하면 청취자가 다른 쪽 끝에 값을 받는 형태고, 여러 수신기를 하나의 스트림에 넣을 수 있으며 파이프라인에 넣을 때 모두 동일한 값을 얻는다. SteamController를 통해 스트림을 만들고 관리할 수 있습니다.
25. Streams의 유형은 무엇인가요?
- 단일 구독 스트림 : 이 스트림은 이벤트를 순차적으로 전달한다. 더 큰 전체 내에 포함된 시퀀스로 간주되며, 이러한 스트림은 파일 읽기와 같이 이벤트가 수신되는 순서가 중요한 경우에 사용된다.
- 브로드캐스트 스트림 : 이 스트림은 구독자에게 이벤트를 전달한다. 이벤트를 구독하면 구독자는 즉시 이벤트를 들을 수 있다.
26. Flutter SDK는 무슨 뜻인가요?
Flutter SDK(소프트웨어 개발 키트)를 사용하면 개발자가 단일 코드 베이스를 사용하여 모바일, 웹 및 데스크톱용 애플리케이션을 빌드할 수 있다.
27. Hot reload와 Hot restart의 차이는 무엇인가요.
다트 응용 프로그램의 경우 초기 실행에는 상당한 시간이 필요하다. 따라서 이 문제를 해결하기 위해 flutter에는 Hot Reload와 Hot Restart라는 두 가지 기능이 있어 앱을 실행한 후 실행 시간을 줄여준다.
- Hot Reload : 기능을 수행하는 데 약 1초가 걸리는 Flutter의 뛰어난 기능. 이 기능을 사용하면 쉽고 빠르게 변경, 버그 수정, UI 생성 및 기능 추가가 가능하다. 핫 리로드 기능을 활용하여 새 코드를 파일로 빠르게 컴파일하고 DVM(Dart Virtual Machine)으로 보낼 수 있다. DVM이 업데이트를 완료하는 즉시 앱의 UI를 업데이트합니다.
- 핫 리스타트 : 핫 리로드와 비교하여 기능이 약간 다르다. 여기에서 앱의 보존 상태가 파괴되고 코드가 처음부터 다시 컴파일된다. 핫 리로드보다 시간이 오래 걸리지만 전체 재시작 기능보다 빠르다.
28. BuildContext에 대해서 설명하세요.
BuildContext는 위젯 트리에서 위젯을 식별하거나 찾는 데 사용된다. 각 위젯에는 자체 BuildContext, 즉 위젯당 하나의 BuildContext가 있습니다. 이를 활용하여 위젯 부모와 상호 작용하고 위젯 데이터에 액세스할 수 있다.
29. Widget Testing 은 무엇인가요?
- 단위 테스트 : 단위 테스트를 사용하면 클래스나 메서드를 테스트할 수 있다. 다만 단위 테스트는 화면 렌더링, 외부 서비스와의 상호 작용 또는 사용자 상호 작용을 확인하지 않는다.
- 위젯 테스트 : 위젯 테스트를 사용하면 단일 위젯 을 테스트할 수 있다. 이렇게 하면 위젯의 UI가 예상대로 표시되고 이벤트에 적절하게 응답한다. 즉, 위젯 디자인, 렌더링 및 다른 위젯과의 상호 작용이 기준에 부합하는지 확인하는 테스트이다.
- 통합 테스트 : 통합 테스트를 사용하면 전체 앱의 중요한 흐름을 테스트할 수 있다.
30. 상태관리란 무엇인가요?
상태 관리는 매우 중요합니다. 이를 사용하면 다양한 UI 컨트롤의 상태가 중앙 집중화되어 애플리케이션 전체의 데이터 흐름을 처리할 수 있다. (텍스트 필드, 라디오 버튼, 체크박스, 드롭다운, 토글, 양식 등등)
- Ephemeral State: 임시 상태는 UI 상태 또는 로컬 상태라고도 하며 특정 위젯과 관련됨. 즉, 특정 위젯 내에 포함된 상태이며 StatefulWidget을 통해 Flutter는 이 상태를 지원한다.
- App State: 앱의 여러 부분에서 공유하고 세션 간에 유지하려는 상태이므로 임시 상태와 다르다. 따라서 이러한 유형의 상태는 전역적으로 사용 가능하다.
31. pubspec.yaml 파일에 대해서 설명하세요.
‘pubspec’이라고도 하는 pubspec.yaml 파일은 Flutter 프로젝트를 만들 때 포함되는 파일로 프로젝트 트리의 맨 위에 위치한다. 이 파일에는 프로젝트에 필요한 패키지 및 해당 버전, 글꼴 등과 같은 종속성에 대한 정보가 포함되며 다음에 프로젝트를 빌드할 때 동일한 패키지 버전을 얻게 됩니다.
이 파일에는 다음이 포함되어 있습니다.
- 프로젝트 이름, 버전, 설명 등과 같은 일반 프로젝트 설정
- 프로젝트 내의 종속성.
- 프로젝트 자산(예: 이미지, 오디오 등).
32. Tween Animation에 대해서 어떻게 이해하고 있나요?
애니메이션의 시작과 끝점은 트윈 애니메이션에서 지정하면 애니메이션이 시작 부분에서 시작하여 끝점에 도달할 때까지 일련의 값을 통해 진행할 수 있다. 전환 속도와 기간도 트윈 애니메이션을 사용하여 결정된다.
33. 플러터에서 주로 사용되는 Database packages 두가지는 무엇인가요?
- Firebase 데이터베이스 : 사용자에게 클라우드 데이터베이스에 대한 액세스 및 제어를 제공. Firebase는 기본적으로 JSON 프로토콜을 통해 데이터 검색 및 저장을 관리할 수 있는 Flutter 앱용 NoSQL 데이터베이스를 제공한다. 데이터 동기화 및 빠른 로딩은 Flutter 앱에 가장 적합한 옵션 중 하나입니다.
- NoSQL DB
- API(REST만 해당)
- 입증
- 해석학
- 저장
- SQFlite 데이터베이스 : 사용자는 이를 사용하여 SQLite 데이터베이스에 액세스하고 수정할 수 있다.
- 서버리스
- 제로 구성
- 오픈 소스
- 콤팩트
- 단일 DB 파일
34. 플러터 Provider에 대해 설명하세요.
Provider는 위젯을 사용하여 구축됨. Flutter가 생성하는 새 위젯 하위 클래스가 있는 Flutter의 일부인 것처럼 Provider의 모든 객체를 사용할 수 있다. Provider는 상태 관리를 처리하는 가장 간단한 방법.(그 외에 GetX, BLoC)
35. Await는 무엇인가요?
async 메서드가 완료될 때까지 await는 프로세스 흐름을 중단한다. 대기는 일반적으로 반환 값을 얻을 수 있도록 이 함수가 완료될 때까지 대기를 의미. 대기는 비동기와 함께만 사용할 수 있다.
장점: 네이티브를 몰라도 앱을 만들 수 있다
단점: 네이티브를 알아야 했다.
리엑트 네이티브의 장점은 네이티브를 몰라도 앱을 만들 수 있지만, 단점은 네이티브를 알아야 했다는 것이다. -???
The advantage of React Native is that you can create apps without knowing native, but the downside is that you had to know native.