데브허브 | DEVHUB | How Flutter Works: The Flutter Engine and Embedders #DecodingFlutterHow Flutter Works: The Flutter Engine and Embedders #DecodingFlutter
- Flutter 앱은 네이티브 모바일 앱의 '보호 쉘' 내에서 실행되며, 실제
main 메서드는 Dart가 아닌 네이티브 코드에 있습니다. 🐚
flutter create 명령은 Flutter Engine을 실행하는 '접착 코드'가 포함된 일반적인 네이티브 프로젝트를 생성합니다. 🔗
- iOS에서
FlutterAppDelegate는 FlutterViewController를 시작하고, 이 컨트롤러가 Flutter Engine을 구동합니다. 🚀
- 기존 네이티브 프로젝트에 Flutter를 통합하는 'add to app' 기능을 통해 Flutter가 프로젝트의 일부를 제어할 수 있습니다. 🧩
- Flutter Engine은 Dart가 아닌 C++로 작성되었으며, Flutter와 외부 세계 간의 모든 입출력 통신을 담당합니다. ⚙️
- Engine은 장치 정보, 제스처, 사용자 환경 설정(지역화, 테마 등)과 같은 입력을 처리합니다. 📥
- Engine은 접근성 정보와 각 프레임의 새로운 픽셀 버퍼와 같은 출력을 생성합니다. 📤
- Engine이 C++로 작성된 주된 이유는 Chrome에서 포크되었고, 특정 그래픽 작업에 C++가 최적이기 때문입니다. 💻
- Engine은 플랫폼 독립적인 레이어와 플랫폼별 임베더 레이어로 구성되어 Flutter 프레임워크를 호스트 플랫폼에 연결합니다. 🌉
- Engine은 Skia 또는 Impeller를 사용하여 RenderObject의 그리기 명령을 활성 그래픽 프레임워크의 셰이더 호출로 변환하여 렌더링을 수행합니다. 🎨
- Flutter는 세 가지 주요 스레드를 사용합니다: OS가 제공하는 플랫폼 스레드, 모든 Dart 코드를 실행하는 UI 스레드, 픽셀 렌더링을 담당하는 래스터 스레드. 🧵
- Flutter Engine은 플랫폼 채널 메커니즘을 통해 Dart 코드와 네이티브 코드 간의 함수 호출을 양방향으로 라우팅합니다. 📡
- Pigeon 패키지는 플랫폼 채널을 위한 타입 안전한 상용구 코드를 생성하여 Dart에서 네이티브 코드를 쉽게 호출할 수 있도록 돕습니다. 🕊️
- Flutter 개발자는 플랫폼 채널을 통해 모든 네이티브 API에 접근할 수 있으며, 새로운 기능도 통합할 수 있습니다. 🔓
- 이 시리즈는 Dart 언어부터 위젯, 엘리먼트, 렌더 객체 트리, 그리고 엔진 및 임베더 레이어까지 Flutter의 작동 방식을 포괄적으로 설명했습니다. 🗺️