Flutter 이해하기
플러터를 시작해보자!
플러터란 ?
android 와 ios 앱과 웹을 단일 코드 베이스로 개발할 수 있는 구글의 모바일 UI 프레임워크
원래는 ios 와 android는 2개의 코드가 필요하다. java, swift
플랫폼 별로 달라지는 부분들을 서로 다른 플랫폼에서도 자연스럽게 동작하는 앱을 개발하는 것이 목표이다.
플러터의 모든 것은 위젯이다. 따라서 위젯에 대한 개념을 안다면 쉽게 개발이 가능하다
플러터의 언어 특징
- 플러터는 Dart 라는 프래그래밍 언어를 사용한다.
- Type 을 지원하는 언어
- Type 추론을 지원한다
- 단일 스레드로 비동기 방식을 지원
- UI 에 최적화된 언어
- 동시성을 지원하지만 완벽하게 격리됨을 보장해 준다
- 스프레드 연산자를 지원
- 배열은 없고 컬렉션만 존재
- Kotlin, Swift, Java, Typescript 를 안다면 배우기 쉽다.
- Dart 를 네이티브 코드로 컴파일하여 앱에 빌드할 수 있다.
- 개발시에는 핫 리로드 라는 특수 기능이 있는 가상 머신 VM 을 사용해서 코드를 업데이트하고 다시 배포하지 않고도 저장만 한다면 변경 사항을 실시간으로 확인 할 수 있다.
플러터가 ios 나 android 둘다 지원하는 이유
Skia 엔진 때문.
Skia 엔진은 다양한 환경에서 공통 API 를 가지고 화면을 그릴수 있도록 도와주는 오픈소스 2D 그래픽 라이브러리.
React Native 와 Flutter 의 버튼 동작 방식
React Native
React Native
Flutter
AOT 와 JLT 지원
AOT (Ahead of time)
Dart 언어로 개발한 코드를 휴대폰에 빌드하기 전에 해당 핸드폰의 기계어 코드 (Native Code)로 사전 컴파일 하여 코드를 빌드 => 네이티브 성능을 낼 수 있다. ( 프로덕션 모드에서 사용 )
JIT (Just in time)
JIT 는 런타임에서 실행할 수 있는 중간언어로 변환한 후 Dart의 가상머신 (VM) 을 통해서 중간언어를 실시간으로 번역
해당 기기에 맞게 번역을 실행하고 즉시 실행
AOT 에 비해 런타임시 실행이 느림 ( 개발모드에서만 사용 )
플러터 아키텍처
플러터 아키텍처는 세 가지 주요 계층이 있다.
프레임 워크 계층은 다트로 작성한다.
여기에는 UI 테마, 위젯, 레이아웃 등 기본 구성요소가 포함 된다.
플러그인으로는 JSON 직렬화, 카메라 액세스, 인 앱 결제와 같은 고급 기능이 있다.
엔진 계층은 핵심 C++ 라이브러리가 포함되어 있다.
엔진은 I/O, 그래픽, 텍스트 레이아웃, 접근성, 플러그인 아키텍처, 접근성 및 Dart 런타임과 같은 Flutter API 저수준 기본 요소를 구현
화면에서 빠른 렌더링을 위해 플러터 장면을 래스터화 하는 역할
임베더 계층은 네이티브 앱으로 통하는 진입점을 제공
네이티브 서비스에 대한 액세스를 위해 기본 운영 체제와 커뮤니케이션 한다.
iOS Shell, Android Shell 을 Embedder API 를 통해 통신하는 계층
플러터는 가능 한 것들
- HTML, CSS, Javascript 를 몰라도 웹 디자인이 가능
- Java 를 몰라도 Android 디자인이 가능
- Swift 를 몰라도 iOS 디자인이 가능
- Dart 언어와 Flutter 프레임워크만 알면 데스크탑 앱을 만들 수 있음