문서:Dart(프로그래밍 언어)

역사 raw
대문 랜덤 문서 최근 토론
파일:dartpl.png

1. 개요2. 특징
2.1. 디벨로프 워크플로우 (JIT+다트VM)2.2. 컴파일 to 네이티브 (AOT+런타임)2.3. 웹 디벨로프 워크플로우 (Dart dev 컴파일러)2.4. 웹 프로덕션 (다트toJS 컴파일러)
2.4.1. Dart Web2.4.2. Flutter for Web (Hummingbird)
3. 장점4. 자바, C#, PHP, ASP.NET, JS, HTML, CSS를 모두 대체하는 통합 언어5. 관련 문서6. 외부 링크

공식 사이트
void main() {
  print("Hello, world!");
} 

1. 개요

구글이 멀티 플랫폼 상에서 동작되도록 하는 앱을 위해 제창된 프로그래밍 언어. 다트는 2011년 10월에 공개되었다. 기본적으로 C언어의 문법과 거의 같으며 Java, C#, Javascript와 같은 기능적 스트럭쳐를 추가한 언어로, 언급된 언어보다 간결하고 강력한 기능을 지원한다. 모바일, 데스크탑, 서버, 웹 앱 용도에 사용된다. Dart는 DVM(Dart VM)상에서 동작하거나 네이티브 컴파일링을 통해 모바일, 데스크탑, 웹브라우져, 서버 플랫폼 상에서 어플리케이션 실행을 지원하고 있다. Dart 프로젝트의 목적은 구조적이지만 유연하고 프로그래머들에게 자연스럽고 다양한 종류의 기기에서 동작되도록 하는 것이다. 구글에서 2017년 발표한 크로스플랫폼 앱 프레임워크인 Flutter가 이 언어를 사용하고 있다.

2020년 9월 현재 react native, ionic, xamarin을 모두 제치고 크로스 플랫폼 시장용 컴퓨터 언어 1위에 등제되고있다. 2020년 말 Github 인기도 7위까지 등제되고도 있다. 2020년 5월 기준 최신 안정 버전은 2.7.2이다.

공식적으로 지원하고 있는 IDE로는 안드로이드 스튜디오, IntelliJ IDEA, VS Code 등이 있으며 각각의 IDE에서 Dart 및 Flutter 플러그인을 설치하여 다트/플러터 프로그래밍에 필요한 소프트웨어 디자인 환경을 제공하고 있다.

2. 특징

프로그래머들에게 자연스럽게 다가가는 Dart의 목적에 맞게, 기존 프로그래밍 언어들의 특징들이 많이 보인다. 강력한 타입 시스템, 몇몇(C, Java 등) 프로그래밍 언어와 같이 main 함수에서 시작한다는 것이 가장 대표적인 부분이다.

Dart를 사용하여 간단한 스크립트 또는 완전한 기능의 애플리케이션을 만들 수 있다. 모바일, 프론트엔드, 백엔드, 명령 줄 스크립트, 서버, 임베디드 애플리케이션을 만들 수 있다. 즉 Dart 언어 하나로 모바일, 웹, 데스크탑, 임베디드까지 커버할 수 있다. 유연한 컴파일러 기술을 통해 대상 플랫폼 및 목표에 따라 Dart 코드를 다양한 방식으로 실행할 수 있다.

- Dart Native: 디바이스(모바일, 데스크톱, 서버, 임베디드 등)를 대상으로 하는 프로그램의 경우 Dart Native를 이용한다. 여기에는 순수 Dart 인터프리터와 JIT(Just-In-Time) 컴파일러, AOT(Ahead-Of-Time) 컴파일러가 모두 포함되어 있다.
- Dart Web: 웹을 대상으로 하는 프로그램의 경우 Dart Web을 이용한다. 개발 타임 컴파일러(dartdevc)와 프로덕션 타임 컴파일러(dart2js)가 모두 포함되어 있다.

2.1. 디벨로프 워크플로우 (JIT+다트VM)

반복적인 작업을 위해서는 빠른 개발 주기가 중요하다. 다트 VM에는 pure interpreter(예 : iOS 장치에 필요)와 런타임 최적화를 모두 지원하는 JIT(just-in-time compiler)가 있다.

앱을 프로덕션 환경에 배포 할 준비가 되면 (앱 스토어에 게시하거나 프로덕션 백엔드에 배포 할 때) Dart AOT 컴파일러를 사용하여 네이티브 ARM 또는 X64 코드 머신 코드로 앱을 사전에 컴파일 할 수 있다. AOT 컴파일 된 애플리케이션은 즉시 시작하고 원활하게 실행된다.

AOT로 컴파일된 코드는 Dart 타입 시스템을 실행하고 빠른 오브젝트 할당 및 생성된 가비지 콜렉터를 사용하여 메모리를 관리하는 효율적인 Dart 런타임에서 실행된다.

2.2. 컴파일 to 네이티브 (AOT+런타임)

Dart 네이티브는 모바일, 데스크탑 및 서버 애플리케이션용 네이티브 ARM 또는 X64 시스템 코드로 컴파일 된 Dart 코드를 실행할 수 있게 한다. 모바일 또는 데스크탑, 웹, 임베디드 장치를 대상으로 할 때 Flutter 프레임워크는 다트 네이티브가 제공하는 인기 있는 멀티 플랫폼 UI 툴킷이다.

2.3. 웹 디벨로프 워크플로우 (Dart dev 컴파일러)

다트 dev 컴파일러(dartdevc)는 신속한 처리를 위해 최적화된 Dart-to-JavaScript 컴파일러이다. dartdevc를 직접 사용하는 대신 webdev와 함께 실행, 디버깅 및 빌드와 같은 핵심 개발자 작업을 지원하는 도구와 함께 사용한다.

2.4. 웹 프로덕션 (다트toJS 컴파일러)

dart2js 도구는 Dart 코드를 빠르고 컴팩트 한 배치 가능한 JavaScript로 컴파일 한다. 데드 코드 제거(dead-code elimination)와 같은 기술을 사용한다.

2.4.1. Dart Web

Dart Web은 JavaScript로 구동되는 웹 플랫폼에서 Dart 코드를 실행할 수 있게 한다. Dart Web을 사용하면 Dart 코드를 JavaScript 코드로 컴파일 할 수 있다. 이 코드는 웹 브라우저에서 실행 된다.

널리 사용되는 멀티 플랫폼 UI 툴킷 인 Flutter 프레임워크는 웹 애플리케이션을 타겟팅 할 때 Dart Web에서도 제공된다. 널리 사용되는 웹 앱 툴킷 인 AngularDart 프레임워크는 Dart Web에서도 제공된다.

2.4.2. Flutter for Web (Hummingbird)

PHP/ASP.NET/JAVA, HTML, CSS, Javascript의 모든 기능을 Dart/Flutter하나로 통합하고 있다.

3. 장점

  • 다른 언어처럼 문자열에 변수와 계산식을 포함시킬 때 매우 편하게 넣을 수 있다.
  • JavaScript처럼 동적 타입을 이용할 수 있다.(Production Mode로 실행 시) 다만 Dart는 강력한 정적 타입 시스템을 지원하는 언어이기 때문에, 동적 타입을 일부러 사용할 이유는 없다.
  • 정적 타입(Checked Mode로 실행 시)을 이용하면 코드 상의 오류를 쉽게 잡아낼 수 있어 리팩토링 시 유리하며, 대형 프로젝트에 적합하다.
  • JavaC\# 같은 클래스 기반 객체지향을 지원한다.[2]
  • JavaScript에는 var 전위자의 스코프 함정, this 레퍼런스의 함정, 형변환 함정들이 있고, 초보자에게 진입장벽이 있는 언어다. TypeScript는 기존 JavaScript에 타입 시스템만을 추가하여 함정을 그대로 가지고 있다. Dart는 JavaScript에 있는 함정들을 모두 제거하였다.
  • JavaScript로 컴파일이 가능하다!!! 현재 모든 웹 브라우저에서 돌아가게 만들 수 있다.
  • 네이티브 코드로 컴파일 할 수 있다. 따라서, 웹앱이 아닌 네이티브 코드로 안드로이드iOS용 앱을 제작할 수 있다. Flutter 라이브러리를 사용하여, 하나의 모바일, 데스트탑, 웹용 애플리케이션을 제작할 수 있다. 2019년 6월 현재 데스크탑과 웹용 애플리케이션의 안정화에는 좀 더 시간이 필요하다.

4. 자바, C#, PHP, ASP.NET, JS, HTML, CSS를 모두 대체하는 통합 언어

Flutter와 Dart는 2015년 후반에 출시된 최신형 크로스플랫폼 소프트웨어 디자인 프래임워크 및 프로그래밍 언어이다. Dart/Flutter는 2020년 9월 현재 크로스플랫폼 프래임워크 시장에서 시장점유율 1위로 등극하고 있다. (2위 react native, 3위 ionic, 4위 Xamarin/MAUI). 웹까지 지원하는 멀티플랫폼 통합 프레임워크인 Flutter가 등장하면서 C#, Java, PHP, ASP.NET, HTML, CSS, Javascript를 각기 따로배울 필요없이 Dart 언어 하나로 모든것을 통합해 가고 있다. Dart/Flutter 프래임워크 하나로 웹 서버 및 웹 클라이언트 양쪽에서 모두 사용가능하다.

기존에 Java, JavaScript, C#에 익숙한 사람들이나 그 회사의 판매자들은 기존것을 버려야 하거나 강력한 경쟁자가 나타났기 때문에 Dart를 좋아할 리 없다. Dart 언어 하나만 배우면 PHP/ASP/Java/C#, Javascript, HTML, CSS와 같은 여러 언어를 공부할 필요가 없고 학습량이 대폭 줄어든다. Dart언어 하나로 모바일, 웹, 데스크탑, 서버까지 모든것을 통합하고 있기 때문이다.

경쟁자인 페이스북, 애플, Mozilla가 당연히 부정적인 입장을 내비쳤으나 Dart/Flutter의 목표 중 하나인 웹서버/웹클라이언트 지원이 발표되었기 때문에 앞으로 전망도 밝다. 거기다 WebAssembly까지 지원할 예정으로 Dart를 네이티브로 지원할 예정이다. 구글의 차세대 운영체제 퓨시아가 Dart를 지원할 예정이다.[3]

5. 관련 문서

6. 외부 링크

[1] JavaScript의 객체지향은 프로토타입 기반 객체지향으로 매우 마이너한 기법에 속한다. 다만 ES6에 Class 문법이 추가되어 Java 같은 클래스 기반 객체지향 언어와 비슷하게 작성할 수 있게 되었다.[2] JavaScript의 객체지향은 프로토타입 기반 객체지향으로 매우 마이너한 기법에 속한다. 다만 ES6에 Class 문법이 추가되어 Java 같은 클래스 기반 객체지향 언어와 비슷하게 작성할 수 있게 되었다.[3] 퓨시아는 C/C++/Rust 등등 상당히 많은 수의 다른 언어도 같이 지원한다.