티스토리 뷰
● Dart란?
- Dart는 객체 지향 언어로서 모든 플랫폼에서 빠른 앱을 위한 클라이언트 최적화 언어이다.
cf1) 참고로 Flutter도 객체 지향 언어이다.
cf2) 참고로 Dart는 Google에서 만들었다.
1. UI 최적화용
→ 사용자 인터페이스 생성 요구에 특화된 프로그래밍 언어로 개발(User Interface 제작에 최적화)
2. 생산적인 개발
→ 핫 리로드를 사용하여 실행 중인 앱에서 즉시 결과 확인
3. 모든 플랫폼에서 빠르다.
→ 모바일, 데스크톱 및 백엔드용 ARM 및 x64 머신 코드로 컴파일한다. 혹은 web용 JavaScript로 컴파일
4. Flutter 프레임워크는 다중 플랫폼 UI 툴킷으로서 Dart 플랫폼으로 구동되며
IOS, Android, macOS, Windows, Linux 및 웹에서 실행되는 UI를 빌드하기 위한 도구 및 UI 라이브러리를 제공한다.
- 쉽게 말해서 Flutter를 사용하려면 그것의 기초인 Dart를 미리 배워둬야 한다.
- Dart에 대한 기초 없이 Flutter를 바로 배우는 것은 추천하지 않는다고 한다.
● Dart를 사용하는 이유
1. Dart Web
→ 내가 작성한 Dart 코드를 javascript로 변환해주는 컴파일러
2. Dart Native
→ 내가 작성한 Dart 코드를 여러 CPU의 아키텍쳐에 맞게 변환해주는 컴파일러
ex) Dart 코드를 ARM32에 맞게 변환 / Dart 코드를 ARM64에 맞게 변환 / Dart 코드를 데스크탑용 맞게 변환
→ 즉, Dart 하나만으로도 IOS, Android, macOS, Windows, Linux 등으로 컴파일 할 수 있다는 것이다.
→ 거의 모든 곳에서 작동하도록 컴파일 될 수 있다는 것이다.
cf) ARM64는 대부분의 모바일 폰에서 사용한다고 한다.
1. 컴파일
- Dart는 2개의 컴파일러를 가지고 있다. 그렇다면 Dart는 도대체 어떻게 컴파일 하는 것일까?
1. AOT(Ahead-of-Time) 컴파일러
- 코딩을 다 한 후 컴파일 시점에 아키텍쳐를 지정해줘야한다.
- 컴파일을 먼저한 후 그 다음에 배포(여기서 배포되는 것은 CPU가 이해할 수 있는 기계어이다.)
- 하나의 아키텍쳐(OS, Android, macOS, Windows 등)를 위해 컴파일 한다는 것은 시간이 오래걸린다.
- 그 이유는 컴파일러가 수 많은 최적화 작업을 진행해야 하고 인간이 작성한 코드를 기계어로 바꾸는 등 해야하는 일이 많기 때문이다.
- 따라서 AOT 컴파일러는 UI를 만들거나 개발 모드로 작업 중일 때는 좋지않다.
- 간단한 사항을 하나 수정한 후 그것을 확인하고 싶은 경우에도 AOT 방식을 사용하면 처음부터 끝까지 모든 코드를 다시 컴파일 해야하기 때문이다.(개발 중에는 빠른 결과 확인이 좋기 때문이다.)
- 즉, 무언가를 변경한 후 그것의 결과를 보고 싶으면 그때마다 전체 프로젝트를 다시 컴파일해야 한다는 것이다.
2. JIT(Just-In-Time) 컴파일러
- 이러한 경우 AOT 대신 사용할 수 있는 컴파일 방식이 바로 JIT 컴파일러이다.
- JIT 컴파일러는 dart VM을 사용하는데 이는 작성한 코드의 결과를 바로 화면에서 확인할 수 있다.
- 단, JIT는 내가 작성한 코드가 VM(가상머신)에서 작동하고 있기에 조금 느릴 수 있다.(그래도 AOP 보다는 빠르다.)
- 하지만 이것은 오직 개발중일때만 사용하는 것이다. 즉, 개발 중에는 dart 가상 머신이 JIT 컴파일러를 제공한다.
- 하지만 개발이 끝난 후 프로젝트(app, web 등)를 배포한다고 하면 dart VM이 아니라 AOP 컴파일러를 사용한다.
- 개발 중에는 내 컴퓨터에서만 잘 돌아가면 되지만 배포할 때는 배포하고자 하는 아키텍쳐에 맞게 컴파일돼야 하니까
[정리]
- Dart에는 JIT(Just-In-Time) 컴파일 기능이 있는 Dart VM과 기계 코드 생성을 위한 AOT(Ahead-of-Time)
컴파일러가 모두 포함되어 있다.
1. 개발 중
- 작성한 코드를 dart VM(가상 머신)에서 실행
- dart VM이 코드를 JIT으로 컴파일해준다.
- VM에서 코드가 돌아가기에 속도가 느릴 수는 있지만 결과를 거의 바로 확인할 수 있다.
2. 배포
- dart가 코드를 AOT 방식으로 컴파일
- 즉, 작성한 코드가 실제로 배포하려는 아키텍쳐에 맞게 변환(기계어로 변환)
- 앱이 빨리 돌아가게 만들어준다. = dart VM에서 계속 코드를 실행하는게 아니라 배포하고자 하는 운영체제에
맞춰 코드가 실행되도록 기계어로 변환하는 것이다.
- 배포되는 앱은 더 이상 VM이 아니라 실사용자의 운영체제에서 실행되기 때문에 당연히 그것에 최적화된 코드가
더 빨리 돌아간다.
- 이러한 컴파일 방식을 Dart가 제공해주는 것이고 그렇기에 Dart가 개발 및 배포에 좋은 언어인 이유이다.
2. null safety
- null safety는 안전한 프로그램 빌드에서 매우 중요하다.
- java, c++ 등에도 null과 관련한 문제는 아우 항상 스트레스다.
- Dart는 null safety가 있기에 null에서 비롯된 문제로부터 프로그램을 안전하게 만들어준다.
cf) 왜 Flutter는 하필 Dart 기반으로 돌아가는 걸까?
1. Dart가 JIT, AOP 2가지 방식의 컴파일을 지원
ㄴ 개발 중에는 JIT를 통해 빠른 피드백 가능, 최종 배포되는 앱은 AOP를 통해 컴파일 돼 빠른 앱 동작 가능
2. Dart와 Flutter 모두 구글이 제작했으므로 서로 상호작용 가능
'흥미 > Dart' 카테고리의 다른 글
#5 Final Variables / final과 const (0) | 2023.01.08 |
---|---|
#4 Dynamic Type (0) | 2023.01.05 |
#3 변수 - The Var Keyword, 명시적 타입 (0) | 2022.12.29 |
#2 Dart 실행 / main method, 세미콜론 (0) | 2022.12.28 |
#0 완전 새로운 걸 배우고 싶어서 (0) | 2022.12.20 |
- Total
- Today
- Yesterday
- Phaser
- 빅데이터 분석기사
- java
- 코테
- Stream
- 알고리즘
- db
- node.js
- OS
- Java8
- 메모리
- jpa
- nosql
- Phaser3
- 프로세스
- API
- MySQL
- DART
- 운영체제
- SQL
- MongoDB
- SpringBoot
- git
- 빅데이터
- 자료구조
- 프로그래머스
- Advanced Stream
- Spring Boot
- 코딩테스트
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |