티스토리 뷰

흥미/Dart

#1 Dart란?

RadderNepa 2022. 12. 25. 00:27

● 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를 사용하는 이유

https://dart.dev/overview

 

Dart overview

A short introduction to Dart

dart.dev

https://dart.dev/overview

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이 아니라 실사용자의 운영체제에서 실행되기 때문에 당연히 그것에 최적화된 코드가
더 빨리 돌아간다.

https://dart.dev/overview / Dart의 컴파일러 기술을 사용하면 다양한 방식으로 코드를 실행할 수 있다.

 

- 이러한 컴파일 방식을 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
링크
«   2024/12   »
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
글 보관함