1.dart는 왜 빠를까?
1. dart는 두 개의 컴파일러를 도입하였다.
Dart Native = dart 코드를 여러 cpu의 아키텍쳐(ARM32 & ARM64 & Risc-V & x86_64)에 맞게 변환시키는 컴파일러
Dart Web = dart로 쓴 코드를 javascript로 변환시키는 컴파일러
Dart는 JIT(just-in-time), AOT(ahead-of-time) 에 의해 컴파일되는데
AOT란?
코드를 실행하기 전에 사전 컴파일을 통해 네이티브 머신 코드로 변환하는 과정으로 Dart뿐만 아니라 C, C++, Rust, Go 같은 언어에서도 널리 사용되는 방식이다
예를 들어, C나 C++ 같은 언어로 코딩한 경우, 실행 파일을 생성하기 위해 컴파일 시 운영체제와 CPU 아키텍처에 맞는 바이너리를 생성해야 하는데 Windows에 배포하려면 Windows용 실행 파일로 컴파일해야 하며, Linux나 macOS에 배포하려면 각각의 플랫폼에 맞는 실행 파일로 컴파일해야 합니다.
C 컴파일러는 이 과정을 통해 코드를 기계어로 변환하여 사람들이 컴퓨터에서 해당 프로그램을 실행할 수 있도록 해준다.
이렇듯, 코드를 실행하기 전에 컴파일을 완료하고, 그 결과로 생성된 바이너리를 배포하는 방식이 AOT.
개발시 AOT를 사용하게 된다면 코드 수정시 확인하고 싶을때마다 처음부터 모든걸 컴파일을 해야 하기 때문에 시간이 매우 많이 걸리고 번거롭다.
JIT란?
dart VM을 사용하여 작성한 코드의 결과를 바로 화면에 보여준다.
코드를 실행하면서 필요한 부분만 즉석에서 컴파일하므로 개발 속도를 높이지만, 실행 속도는 AOT보다 느릴 수 있다.
그러나 JIT를 사용하면 핫 리로드 기능을 통해 개발 중 코드 변경 사항을 즉각적으로 확인할 수 있다
그렇기 때문에 JIT는 개발중에만 사용된다.
dart 가상머신이 풍부한 디버깅과 함께 JIT컴파일러를 제공하고있기 때문에 개발 결과를 즉각 확인할 수 있다.
개발이 완료되과 app 배포 시 dart VM이 아닌 AOT 컴파일러를 사용하여 다양한 아키텍쳐에서 사용할 수 있게된다.
2. null safety를 통한 안전한 프로그램이다
null 참조 오류는 런타임 크래시의 주요 원인 중 하나이므로, Dart는 Null Safety를 도입하여 컴파일 단계에서 이러한 오류를 방지한다.
Null Safety는 선언된 변수에 null 값을 허용할지 명시적으로 결정하게 함으로써 프로그램 안정성을 높인다.
2. flutter는 왜 dart를 택했을까?
1. JIT와 AOT 컴파일이 둘 다 있다
그래서 빠른 피드백을 원하면서 최종 앱의 컴파일이 빠르기 때문에 모바일 개발에 아주 좋은 언어라 할 수 있다.
2. dart와 flutter 둘 다 구글에서 만들었다.
그래서 flutter를 위해 dart를 최적화 할 수 있다.
처음 시작할 때 dart나 flutter를 설치하지 않아도 dartpad.dev 사이트에서 바로 연습할 수 있다.
DartPad
dartpad.dev
'develop > flutter' 카테고리의 다른 글
Variables (변수) (0) | 2024.11.19 |
---|---|
Flutter 에서 named argument (1) | 2023.08.29 |
flutter ListView (0) | 2023.08.28 |
[왕초보] 플러터(Flutter)로 시작하는 앱개발 AppBar 위치 (0) | 2023.08.28 |
스파르타 flutter 앱개발 2일차 flutter 설치삭제후 재설치 (0) | 2023.08.24 |