민프

[Flutter] 플러터 다트(Dart)언어란? 구글이 Flutter에 Dart언어를 선택한 이유? (feat. DartPad) 본문

[Flutter]

[Flutter] 플러터 다트(Dart)언어란? 구글이 Flutter에 Dart언어를 선택한 이유? (feat. DartPad)

민프야 2023. 8. 7. 12:01

https://dart-ko.dev/

 

Dart 프로그래밍 언어

Dart는 모든 플랫폼에서 빠른 앱을 개발하기 위해 클라이언트에 최적화된 언어입니다

dart-ko.dev

 

Dart(다트)란?

 

공식홈페이지에 따르면

Dart는 모든 플랫폼에서 빠른 앱을 개발하기 위해 클라이언트에 최적화된 언어입니다.
Dart의 목표는 앱 프레임워크를 위한 유연한 실행 런타임 플랫폼
을 가진 멀티 플랫폼 개발을 위한 가장 생산적인 프로그래밍 언어를 제공하는 것입니다.

Dart의 언어 설계는 클라이언트 개발에 적합하게 개발되었으며 다중 플랫폼 (웹, 모바일 및 데스크톱)에서의 개발(1초 이하의 stateful 핫리로드)과 높은 퀄리티의 프로덕션 경험을 우선시합니다.

Dart는 Flutter의 기반을 형성하였습니다.

Dart 언어는 타입 세이프 합니다; Dart는 변수의 값이 
항상 변수의 정적 타입과 매치됨을 보장하는 정적 타입 체킹을 사용합니다. 가끔, 이것은 sound typing으로도 불립니다. 비록 타입은 필수이지만, 타입 추론이 있기 때문에 어노테이션은 선택적입니다.
Dart 타이핑(typing) 시스템은 유연하여 런타임 검사와 결합된 dynamic타입을 사용할 수 있으며, 이는 실험 중에 또는 동적인 코드에 유용할 수 있습니다.

Dart는 견고한 null 안전성을 지원합니다. 이는 개발자가 해당 변수의 값이 null 일 수 있음을 표시하지 않는다면, null 값을 가지지 못하게 한다는 것을 의미합니다.

이라고 나와있고,

 

위키백과에 따르면

다트(Dart)는 구글이 디자인한 멀티 플랫폼 프로그래밍 언어이고,
이는 2011년 10월 10일~12일까지 열렸던 "GOTO 컨퍼런스"에서 공개되었다.
다트는 자바스크립트를 대체가능하며 크로스 플랫폼 프로그래밍 언어를 목표로 설계되었다.

이라고 나와있다.

 

정리를 해보면

  • 2011년 10월 11~12일까지 열렸던 구글 "GOTO 컨퍼런스"에서 공개되었다.
  • Flutter의 기반을 형성하였다. 
  • 멀티 플랫폼 개발(IOS, Android, Web)이 가능하다.
  • TypeScript처럼 타입을 가진 언어이다. (실제로 공홈에서는 TypeScript와 Dart는 비슷한 목표를 가지고 있다고 했다.)
  • null에 대해 안전성을 지원한다. 

이 정도로 정리를 해보고 Dart의 컴파일러 기술을 봐보자

 

Dart 컴파일러

Dart는 두 개의 컴파일러를 가지고 있다.

위 공식홈페이지의 사진을 보면 크게 Dart Web, Dart Native가 있는데 

- Dart Web

Dart Web은 내가 Dart로 쓴 코드를 JavaScript로 변환해주는 컴파일러다.

- Dart Native

Dart Native는 내가 쓴 Dart 코드를 여러 CPU의 아키텍쳐에 맞게 변환해주고,
Dart는 JIT & AOT 컴파일러를 제공하고 있다. 

  • JIT(Just In Time) 컴파일러
    결론부터 말하자면 Dart VM은 핫리로드를 지원하고 있다. 
    이게 왜 필요하냐면 IOS, Windows, Mac 등을 컴파일한다는 건 나의 코드를 기계어로 바꾸는 등 하는 일이 많아서 시간이 오래 걸리게 된다. 이게 만약에 개발을 할 때 특히 UI를 만들 때 코드 변경할 때 마다 모든걸 컴파일을 한다는 건 개발 중에는 정말.. 스트레스가 쌓일만한 스토리이다.

    이때 JIT컴파일러가 필요하게 되는데, Dart VM에서는 JIT 컴파일러를 사용하는데 내가 쓴 코드의 결과를 바로 화면에 보여준다. 

  • AOT(Ahead-of-time) 컴파일러
    Dart VM은 어디까지나 개발 중일때 사용하게 되는 것 이고, 모든 개발을 다 마치고 앱을 배포 하고싶다면 Dart VM을 사용하지 않고 대신 AOT(Ahead-of-time) 컴파일러를 사용하여서 Native ARM, x64 머신 코드로 컴파일 하게 된다.
    쉽게 말해서) AOT컴파일러를 사용하여서 배포를 하게 되면 내가 만든 앱이 가상 머신에서 동작하는게 아니라 휴대폰, 노트북, 웹사이트에서 기계어를 실행하게 된다는 말이다.

따라서 IOS, Android, Window, Linux, MAC, 사물인터넷으로 컴파일을 할 수가 있다. 

 

구글이 Flutter에 Dart언어를 선택한 이유?

개인적인 생각이지만 결론적으로 Flutter, Dart 둘 다 구글에서 만들었고, 그렇기 때문에 Flutter를 위해서 Dart를 최적화 할 수 있기에 그런 것이 아닐까싶다

Flutter에서 무슨 문제가 발생하면 Dart언어를 수정하면 되는데, 이건 다른 프레임워크들(React-Native, Django...)에서는 할 수 없기 때문이다. 
예를 들어서) Facebook에서 React를 만들었지만 React를 최적화 시키기 위해 JavaScript를 수정할 수는 없다.

 

실제로 공식홈페이지 FAQ에 따르면 처음 Flutter에 Dart를 채택했을 당시에는 AOT컴파일러가 없었다고 한다.

근데 지금은 있는 것 처럼 뭔가 Flutter최적화에 필요한 부분이 있으면 이렇게 언어 자체를 수정해서 사용한다는건 큰 장점이 아닐까싶다.

 

따라서 Dart에서 JIT, AOT 둘 다 제공하고 있고, 여러가지 장점이 있긴하지만 위의 이유가 큰게 아닐까.. 생각이 든다. 

 

 

Dart를 사용해보고싶다면 

https://dartpad.dev/? 

 

DartPad

 

dartpad.dev

위 페이지에가서 하면 된다.

오류 사항도 알려주고, 각 함수에 대한 설명과 개발문서 링크까지 보여주는데 간단하게 해보기에는 좋은 것 같다.


참고링크

https://ko.wikipedia.org/wiki/%EB%8B%A4%ED%8A%B8_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4) 

 

다트 (프로그래밍 언어) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://dart-ko.dev/overview

 

Dart 개요

Dart에 대한 짦은 소개

dart-ko.dev

https://dart-ko.dev/resources/faq

 

Dart FAQ

You have questions about Dart, we have answers.

dart-ko.dev

 

Comments