
Flutter(플러터)는 고성능, 고품질의 iOS, Android 앱과 웹을 단일 코드 베이스로 개발할 수 있는 Google의 Mobile UI Framework이다.
단일 코드 베이스로 개발을 할 수 있다는 것은, iOS & Android 에서 작동하는 앱을 한 번에 만들 수 있다는 것이다.
보통 하나의 앱을 만들기 위해서 iOS와 Android를 위한 2개의 코드(Java, Swift)가 필요하지만, Flutter는 하나의 코드 베이스로 크로스 플랫폼 개발을 가능하게 한다.

Frame(틀)과 Work(일)의 합성어로, 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조이다. 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다.
UI란 User Interface의 줄임말로, 사용자와 애플리케이션이 커뮤니케이션을 할 수 있도록 도움을 주는 매개체 역할을 한다.
매체의 역할을 하는 종류는 다양하게 존재하는데,
휴대폰 화면의 터치 이벤트, 리모콘의 버튼 이벤트 등이 있다고 볼 수 있다.

구글이 지원하는 무료 오픈소스이며, 네이티브앱으로 컴파일이 가능하여 네이티브 수준의 성능을 자랑(AOT 지원 / Skia엔진 보유)한다.
플러터의 모든 것은 위젯이기 때문에 위젯에 대해서만 개념을 숙지하면 쉽게 개발 가능하다.
Dart라는 프로그래밍 언어를 사용(Kotlin, Swift, Java, Typescript를 알고 있으면 쉬움)한다.
Dart를 네이티브 코드로 컴파일하여 앱에 빌드가 가능하며, 앱 개발시 핫 리로드라는 특수 기능이 있는 가상 머신 (VM)을 사용한다.
코드를 업데이트하고 다시 배포하지 않고도 코드를 저장하면 변경 사항을 실시간으로 확인 가능하다.
AOT와 JIT 지원
AOT(Ahead of time) : 프로덕션 모드
Dart언어로 개발한 코드를 휴대폰에 빌드하기 전에 해당 핸드폰의 기계어 코드(네이티브 코드)로 사전 컴파일하여 코드를 빌드한다.
-> 즉, 네이티브 성능을 낼 수 있음.
Dart Code -> iOS Native Code(사전 컴파일) -> iOS
Dart Code -> Android Native Code(사전 컴파일) -> Android
JIT(Just in time) : 개발 모드
런타임에서 실행할 수 있는 중간언어로 변환 후 Dart의 가상머신(VM)을 통해서 중간언어를 실시간으로 번역한다.
AOT에 비해 런타임시 실행이 느리기에, 이 방식은 개발 모드에서만 사용한다.
Dart Code(코드 생성) -> Dart 가상머신이 이해할 수 있는 중간언어로 변환(컴파일) -> Dart가상머신 -> 실행(해당 휴대폰에 맞게 컴파일 및 실행)

구글이 멀티 플랫폼 상에서 동작되도록 하는 앱을 위해 디자인된 프로그래밍 언어이다. 기본적으로 C언어의 문법과 거의 같으며 Java, C#, Javascript와 같은 기능적 스트럭처를 추가한 언어로, 언급된 언어보다 간결하고 강력한 기능을 지원한다. 모바일, 데스크톱, 서버, 웹 앱 용도에 사용된다.
Dart는 DVM(Dart VM)상에서 동작하거나 네이티브 컴파일링을 통해 모바일, 데스크톱, 웹 브라우저, 서버 플랫폼 상에서 어플리케이션 실행을 지원하고 있다. Dart 프로젝트의 목적은 구조적이지만 유연하고 프로그래머들에게 자연스럽고 다양한 종류의 기기에서 동작되도록 하는 것이다. 구글에서 2017년 발표한 크로스플랫폼 앱 프레임워크인 Flutter가 이 언어를 사용하고 있다.
일반적인 React의 경우는,
하지만 Flutter의 경우
Dart 기본 문법에 대해 작성 예정