Dart의 컴파일러 기술을 사용하면 다양한 방식으로 코드를 실행할 수 있다.
✅ 네이티브 플랫폼
모바일 및 데스크톱 장치를 대상으로 하는 앱의 경우 Dart에는 JIT(Just-In-Time)
컴파일 기능이 있는 Dart VM
과 기계 코드 생성을 위한 AOT(Ahead-of-Time)
컴파일러가 모두 포함되어 있다.
✅ 웹 플랫폼
웹을 대상으로 하는 앱의 경우 Dart는 개발 또는 프로덕션 목적으로 컴파일할 수 있다.
웹 컴파일러는 Dart를 JavaScript로 변환한다.
플랫폼 별로 컴파일러를 다르게 사용하기 때문에 Flutter에서 거의 모든 플랫폼으로 개발이 가능하다.
Dart Web을 사용하면 JavaScript로 구동되는 웹 플랫폼에서 Dart 코드를 실행할 수 있다. Dart Web을 사용하면 Dart 코드를 JavaScript 코드로 컴파일하여 브라우저(예: Chrome 내부의 V8)에서 실행한다.
📌 Dart 웹에는 두 가지 컴파일 모드가 있다.
1️⃣ 빠른 개발 주기를 지원하는 점진적 개발 컴파일러
2️⃣ Dart 코드를 빠르고 컴팩트하며 배포 가능한 JavaScript로 컴파일하는 최적화 프로덕션 컴파일러이다. 이러한 효율성은 데드 코드 제거와 같은 기술에서 비롯된다.
다트는 JIT 유형의 컴파일러와 AOT 유형의 컴파일를 모두 사용하기 때문에 개발하는데 있어서 효율적이고 빠르게 개발이 가능하다.
AOT는 실행 전에 코드를 기계 코드로 컴파일하는 컴파일러 유형인 Ahead-Of-Time의 약자이다.
AOT 컴파일러는 일반적으로 해석된 코드에 비해 더 빠르고 더 작은 실행 파일을 생성하지만 변경 사항이 있을 때마다 코드를 다시 컴파일해야 하며 컴파일 프로세스가 더 오래 걸릴 수 있다.
iOS, Android, Widows, Mac 등을 위해 컴파일한다는 건 많은 최적화와 기계어로 변환 작성하는 등 많은 작업이 필요로 하기 때문에 시간이 오래 걸린다.
개발모드에서 변경한 코드에 대한 결과를 보고 싶을때마다 처음부터 모든걸 컴파일한다고 하면 개발 경험이 매우 좋지 않다.
이 상황에서는 JIT 컴파일러를 사용해야한다.
JIT는 JIT(Just-In-Time)의 약자로 미리 코드가 아닌 런타임에 코드를 기계 코드로 컴파일하는 컴파일러 유형이다. 이를 통해 코드를 보다 효율적으로 실행할 수 있을 뿐만 아니라 최종 실행 파일의 크기도 줄일 수 있다.
JIT 컴파일러는 dart VM을 사용하는데 코드의 결과를 바로 화면에 보여준다.
JIT 컴파일러는 오직 개발중일 때만 사용한다.
따라서 Flutter를 개발할 때 사용하고 있는 hot-reload는 JIT 컴파일러 덕분에 가능하다.
📌 개발 모드: JIT 컴파일러
📌 배포(빌드): AOT 컴파일러