민프
[Flutter] Flutter 아키텍쳐를 알아보자 본문
공식문서를 기준으로 Flutter의 아키텍쳐에 대해서 살펴보자
결론적으로
Flutter Dart 코드는 운영체제와 직접적으로 소통하지 않는다.
보통 Native 앱 개발을 할 때 버튼이나 Text Input 등 어떠한 요소를 만들어 달라고 하면 각 운영체제에게 전달되게 됨으로써
안드로이드 or IOS에서의 버튼이 만들어지게 되는데
Flutter는 그렇지 않다.
실제로 Flutter에는 각 OS마다 버튼을 만들어내는 기능은 존재하지 않는다.
결론적으로는
Flutter에서는 게임 엔진과 같이 동작하게 되는데
쉽게 말하자면, 캔버스에 그림을 그리듯이 표현한다.
Flutter에서 렌더링엔진 (Skia, Impeller)에 대해서 궁금하면 아래 링크로 가서 알아보자
[Flutter] Skia, Impeller 렌더링 엔진에 대해서 알아보자
Flutter의 핵심에는 대부분 C++로 작성되고, Flutter 애플리케이션을 지원하는데 필요한 Flutter 엔진이 있다. 그 Flutter 엔진에는 새 프레임을 칠해야 할 때마다 장면을 래스터화하는 역할을 하는데 렌
minf.tistory.com
그럼 Flutter의 아키텍쳐를 살펴보자
- Embedder Platform-specific
- Embedder는 Flutter 앱이 특정 플랫폼(안드로이드, iOS, 윈도우 등)에서 원활하게 동작할 수 있도록 다양한 역할을 수행합니다.
- Flutter 애플리케이션은 기본 OS에 대해 네이티브 앱처럼 패키징됩니다.
- 임베더는 플랫폼별로 적합한 언어로 작성되며,
서비스 접근(카메라, GPS, 네트워크 등.. 하드웨어와 소프트웨어 서비스에 접근할 수 있도록 Flutter앱과 연결)과
이벤트 루프 관리를 담당하여서 Flutter 앱이 다른 앱이나 시스템과 원활하게 동작할 수 있게 합니다.
(현재 안드로이드의 경우 Java 및 C++, iOS 및 MACOS의 경우 Objective-C/Objective-C++,
윈도우 및 리눅스의 경우 C++입니다. ) - 임베더를 통해 Flutter 코드는 모듈로서 기존 앱에 통합되거나 전체 앱의 내용이 될 수 있습니다.
- Engine C/C++
- 주로 C++로 작성되어 있고, 모든 Flutter 애플리케이션을 지원하는 기본 기능을 제공합니다.
- 새 프레임이 그려질 필요가 있을 때, 렌더링 엔진(Skia OR Impeller)을 이용해서 랜더링을 합니다.
- 그래픽, 텍스트 레이아웃, 파일 및 네트워크 I/O, 플러그인 아키텍처,
Dart 런타임 및 컴파일 도구 체인을 포함한 Flutter의 핵심 API의 저수준 기능을 제공합니다.
(Dart 런타임이나 컴파일에 대해서 궁금하다면 아래 링크를 참고하자)
https://minf.tistory.com/222
- Flutter Framework
- 카메라 및 웹뷰와 같은 실제 플러터 앱 개발자가 사용하는 상위 수준의 기능들을 제공하고 있습니다.
참고링크
https://docs.flutter.dev/resources/architectural-overview
Flutter architectural overview
A high-level overview of the architecture of Flutter, including the core principles and concepts that form its design.
docs.flutter.dev
https://docs.flutter.dev/perf/impeller
Impeller rendering engine
What is Impeller and how to enable it?
docs.flutter.dev
'[Flutter]' 카테고리의 다른 글
[Flutter] animation 효과를 적용해보자 (animationController, SingleTickerProviderStateMixin, vsync) (0) | 2023.09.07 |
---|---|
[Flutter] ThemeData, TextTheme를 적용해서 앱의 테마를 지정해보자 (0) | 2023.09.06 |
[Flutter] Skia, Impeller 렌더링 엔진에 대해서 알아보자 (0) | 2023.08.29 |
[Flutter] PageView를 이용해서 Instagram 릴스 같은 페이지를 만들어보자 (0) | 2023.08.11 |
[Flutter] BottomNavigation을 만드는 방법 (0) | 2023.08.11 |