1. Introduction
[1] Flutter란?
- 3D, 가상현실 등 안드로이드, ios, web 뿐만 아니라 iot, 게임 등 다양한 걸 만들 수 있다.
- flutter는 하이브리드 플랫폼처럼 os와 직접 소통하는 게 아니다.
- 짜여진 코드를 flutter framework가 사용하고, 이를 C, C++로 만들어진 엔진을 통해 어플리케이션의 실제 UI를 렌더링한다. (이러한 점은 unity와 비슷하다.)
[2] Flutter의 작동방식
- 각 계층은 다른 계층에 영향을 끼칠 수 없다.
- flutter는 native widget을 사용하지 않는다.
- 앱에서 실행할때 네이티브 앱들과 화면상에서 다른 부분이 존재한다.
- ios와 비슷하게 구성하려했지만 실제 운영체제가 아닌 렌더링 엔진에 의해 그려지는 것이다 보니 조금씩 다른 부분이 존재한다. (ios 유저라면 헷갈릴 수 있지만 실제론 렌더링 엔진이란 것을 잊지 말자!)
출처 : https://docs.flutter.dev/resources/architectural-overview
Flutter Framework
: 개발자와 Flutter를 연결한다.
- dart 언어로 작성되었다.
- Flutter Framework를 통해 개발자들은 Flutter와 소통할 수 있다.
- 레이아웃이나 기본 라이브러리가 포함되어있다.
Engine
: 화면을 렌더링하여 보여준다.
- C, C++로 작성되었다.
- 새 프레임을 칠해야 할 때마다 합성된 장면을 래스터화하는 역할을 한다.
- Flutter 애플리케이션을 지원하는 데 필요한 기본 요소를 지원한다.
- Skia를 통한 그래픽, 텍스트 레이아웃, 파일 및 네트워크 I/O, 접근성 지원, 플러그인 아키텍처, Dart 런타임 및 컴파일 도구 체인 등 저수준의 핵심 API를 제공한다.
- 코드를 실행하는 하나의 가상 VM과 비슷하다.
Embedder
: 호스트 플랫폼(ios, andorid, web .etc) 상에서 엔진을 가동시킨다.
- 플랫폼에 적합한 언어로 작성된다. (java, C++ -> Android / Objective-C, Objective-C++ -> iOS, macOS / C++ -> windows, linux)
- 단순히 캔버스를 렌더링하거나 카메라의 행위를 조작한다.