다트 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Dart는 2011년 구글이 개발한 객체 지향 프로그래밍 언어이다. 웹 개발을 위해 시작되었으나, JavaScript로의 컴파일 방식에서 네이티브 컴파일을 지원하는 방향으로 전환되었다. 2018년 Dart 2.0에서 타입 시스템이 강화되었고, 2023년 Dart 3.0에서는 사운드 널 안전성이 도입되었다. Dart는 웹, 독립 실행형, 네이티브 환경에서 사용 가능하며, 특히 플러터(Flutter) 프레임워크를 통해 모바일 앱 개발에 널리 활용된다.
더 읽어볼만한 페이지
- 2011년 개발된 프로그래밍 언어 - 코틀린 (프로그래밍 언어)
코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다. - 2013년 개발된 프로그래밍 언어 - 퓨어스크립트
퓨어스크립트는 2013년 필 프리먼이 설계한 함수형 프로그래밍 언어이며, 하스켈과 유사한 타입 시스템을 갖추고 자바스크립트 등으로 컴파일되며 엄격한 평가, 불변 자료 구조, 타입 추론을 특징으로 한다. - 2013년 개발된 프로그래밍 언어 - F*
F*는 2007년 프랑스 국립 전산 및 자동화 연구소에서 설계되었고 마이크로소프트 연구소의 지원을 받아 개발된 종속 타입과 정적 타입 시스템을 갖춘 함수형 프로그래밍 언어로서, 코드 정확성 검증을 통해 안전하고 신뢰할 수 있는 소프트웨어 개발에 기여하며 오픈 소스 프로젝트로 운영되어 보안 커널 및 블록체인 기술 검증 등에 활용된다. - 자바스크립트 프로그래밍 언어 계열 - 타입스크립트
타입스크립트는 마이크로소프트에서 개발한 자바스크립트의 상위 집합으로, 정적 타입 지정, 타입 추론 등의 기능을 제공하여 코드의 안정성과 가독성을 높이는 언어이다. - 자바스크립트 프로그래밍 언어 계열 - 커피스크립트
커피스크립트는 자바스크립트 작성을 간소화하기 위해 고안된, 간결하고 표현력이 풍부한 문법을 가진 프로그래밍 언어로서, 자바스크립트로 컴파일되며, 셀프 호스팅 컴파일러, 소스 맵, 문학적 프로그래밍을 지원한다.
다트 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
이름 | 다트 |
종류 | 프로그래밍 언어 |
![]() | |
설명 | 사용자 인터페이스 구축에 최적화된 프로그래밍 언어 |
웹사이트 | 다트 공식 웹사이트 |
개발 및 출시 | |
패러다임 | 다중 패러다임: 함수형 프로그래밍, 명령형 프로그래밍, 객체 지향 프로그래밍, 반사 프로그래밍 |
출시일 | 2011년 10월 10일 |
설계자 | 라스 박, 카스퍼 룬드 |
개발자 | 구글 |
최신 버전 | '' |
최신 버전 출시일 | '}}' |
최신 프리뷰 출시일 | 2021년 12월 14일 |
언어 특징 | |
형 체계 | 1.x 버전: 선택적 타입 2.x 버전: 형 추론 (정적 타이핑, 강한 타이핑) |
구현체 | 다트 VM dart2native dart2js DDC 플러터 |
영향을 받은 언어 | C C++ C# 얼랭 자바 자바스크립트 루비 스몰토크 스트롱토크 타입스크립트 |
플랫폼 | 크로스 플랫폼 |
운영 체제 | 크로스 플랫폼 |
라이선스 | BSD |
파일 확장자 | .dart |
기타 | |
중요 개념 | 컬렉션 확장을 위한 스프레드 연산자 각 플랫폼에 맞는 UI를 사용자 정의하는 컬렉션 if |
특징 | 사용자 인터페이스 구축에 최적화됨 |
참고 자료 | |
추가 정보 | 다트 배우기 다트 언어 둘러보기 다트 타입 시스템 |
2. 역사
다트는 자바스크립트의 문제점을 해결하고, 더 우수한 성능과 대규모 프로젝트에 적합하며, 보안이 더 우수한 언어로 설계되었다.[89][88]
구글 엔지니어들은 "Brightly"라는 클라우드용 통합 개발 환경을 개발하고 있었는데, 이것이 최초의 다트 언어 애플리케이션이 될 것으로 예상되었다. 구글은 다트를 지원하지 않는 웹 브라우저를 위해 다트 언어로 작성된 프로그램을 ECMAScript 3으로 변환하는 크로스 컴파일러와 Google Closure Tools 코드를 다트 언어로 변환하는 도구를 제공한다고 발표했다.[90] 또한, 다트 가상 머신을 크롬 브라우저에 통합할 것이라고 밝혔고, 다른 브라우저들도 이에 따르기를 기대했다. 가상 머신과 크로스 컴파일러는 2011년 말까지 이용 가능할 예정이었다.[89]
하지만 다트의 보급은 확대되지 않았고, 2015년에는 가상 머신의 크롬 통합을 포기했다. 2017년에는 다트가 구글에서 중요한 언어임을 인정하면서도, 경쟁 언어인 TypeScript가 구글 사내 표준 프로그래밍 언어로 승인되었다는 사실이 발표되었다.[91]
2018년 2월에는 다트 2가 발표되었다.[92] 다트 2.6부터 네이티브 코드로 컴파일할 수 있는 dart2native가 개발되었고, 강력한 형식 시스템 등 언어 기능이 강화되었다. 2023년 5월에는 다트 3가 발표되었으며,[93] 기본적으로 null 값을 허용하지 않는 메커니즘(Sound null safety)이 도입되었다.
2. 1. 개발 초기
다트는 2011년 10월 10일부터 12일까지 덴마크 오르후스에서 열린 GOTO 컨퍼런스에서 공개되었다.[10] 이 프로젝트는 라르스 박과 카스퍼 룬드가 시작했다.[11] 다트 1.0은 2013년 11월 14일에 출시되었다.[12]다트는 처음에 엇갈린 반응을 얻었다. 일부에서는 크롬에 다트 VM을 포함하려는 계획 때문에 웹이 분열될 수 있다는 비판을 받았다. 이러한 계획은 2015년 다트 1.9 출시와 함께 중단되었고, 다트 코드를 JavaScript로 컴파일하는 데 집중하게 되었다.[13]
2. 2. Dart 2와 발전
2018년 8월, 타입 시스템을 포함한 언어 변경 사항과 함께 Dart 2.0이 출시되었다.[14] Dart 2.6 버전에는 `dart2native`라는 새로운 확장 기능이 도입되어 리눅스, macOS, 윈도우 데스크톱 플랫폼으로의 네이티브 컴파일이 가능해졌다.[15] 이전에는 개발자가 안드로이드 또는 iOS 기기에서만 새로운 도구를 만들 수 있었으나, 이 확장 기능으로 Dart SDK 설치 없이도 실행 가능한 독립 실행형 파일을 배포할 수 있게 되었다.[16] 플러터 툴킷은 Dart를 통합하여 백엔드 지원과 같은 작은 서비스에서 컴파일할 수 있도록 한다.[17][18]2. 3. Dart 3와 최신 동향
Dart 3.0은 2023년 5월에 출시되었으며, 타입 시스템에 사운드 널 안전성(sound null safety)을 도입하여 런타임에서 발생할 수 있는 널 참조 오류를 컴파일 타임에 방지한다.[19] 이 출시에는 레코드, 패턴,[20] 클래스 수정자와 같은 새로운 기능도 포함되었다.[21]Dart는 3.4 버전부터 WebAssembly로 컴파일할 수 있게 되었다.[22] 2024년 5월부터 WebAssembly로의 컴파일을 지원하여, 웹 브라우저에서 더 빠른 성능을 제공한다.
3. 특징
다트(Dart)는 웹, 모바일, 서버 등 다양한 플랫폼에서 활용 가능한 프로그래밍 언어이다. 특히 웹 개발에서 다트는 자바스크립트(JavaScript)로 컴파일되어 실행되는 특징을 가지고 있다.
다트는 2024년 5월부터 WebAssembly로의 컴파일을 지원하여 웹 앱을 더욱 효율적으로 배포할 수 있게 되었다.[33] 다트 코드는 소스-투-소스 컴파일러를 통해 자바스크립트로 변환되는데, 이 과정에서 최적화가 이루어져 일반적인 자바스크립트 코드보다 더 빠르게 실행될 수 있다.[33]
다트-투-자바스크립트 컴파일러는 여러 번의 발전을 거쳤다.
2013년 3월 28일, 다트 팀은 `dart2js` 컴파일러로 컴파일된 다트 코드가 Chrome의 V8 JavaScript 엔진에서 직접 작성한 JavaScript보다 더 빠르게 실행된다는 연구 결과를 발표했다.[38][39]
Dart 2.18 이전에는 `dart2js`와 `dartdevc`를 명령줄에서 직접 호출할 수 있었으나, Dart 2.18부터는 Dart SDK에 통합되었다. `webdev serve` 명령어는 `dartdevc` 컴파일러를, `webdev build` 명령어는 `dart2js` 컴파일러를 호출한다.
다트 코드는 다음과 같은 네 가지 방법으로 실행할 수 있다.
- 웹: 다트는 주요 웹 브라우저에서 실행될 수 있도록 자바스크립트로 컴파일된다.[94] JavaScript로 컴파일된 Dart 코드는 모든 주요 브라우저와 호환된다.[95]
- 독립 실행: Dart SDK에는 독립 실행형 Dart VM이 포함되어 있어, CLI 환경에서 Dart 코드를 실행할 수 있다.
- 사전 컴파일: Dart 코드는 기계어(네이티브 명령어 세트)로 컴파일할 수 있다. 플러터로 구축된 앱은 AOT 컴파일된 Dart 코드로 앱 스토어에 배포된다.[97]
- 네이티브: Dart 2.6에서는 `dart2native` 컴파일러를 사용하여 독립 실행형 네이티브 실행 코드로 컴파일할 수 있다.[98]
다트는 개발 단계와 최종 배포 단계에서 각각 다른 컴파일러를 사용한다. 개발 단계에서는 빠른 새로고침을 위해 `dartdevc`를 사용하고, 최종 버전에서는 배포 가능한 JavaScript를 생성하는 `dart2js`를 사용한다.[105]
3. 1. 문법 및 기능
다트는 ALGOL 계열 언어이다.[75] C, Java, C#, JavaScript 등이 이 계열에 포함된다.메서드 캐스케이드 구문은 Smalltalk에서 차용되었다.[76] 이 구문은 동일한 객체에 여러 메서드를 연속적으로 호출하기 위한 단축키를 제공한다.
다트의 믹스인은 Strongtalk[77][78] 및 루비의 영향을 받았다.
다트는 애플리케이션을 구성할 때 동시성 및 보안 단위로서 isolate를 사용한다.[79] Isolate 개념은 얼랭에 구현된 액터 모델을 기반으로 한다.[80]
동시성을 구현하기 위해 다트는 메모리를 공유하지 않고 메시지 전달을 사용하는 격리된 독립적인 작업자들을 사용하며,[46] 이는 얼랭 프로세스와 유사하다(액터 모델 참조). 모든 다트 프로그램은 최소 하나의 격리된 작업 영역(isolate)을 사용하며, 이는 메인 격리된 작업 영역(isolate)이다. 다트 2부터 다트 웹 플랫폼은 더 이상 격리된 작업 영역(isolate)을 지원하지 않으며, 대신 웹 워커를 사용할 것을 제안한다.[47][99][100]
3. 2. 널 안전성 (Null Safety)
Dart 2.12부터 Dart는 안전한 널 안전성을 도입했다.[48] 이는 변수가 명시적으로 허용되지 않는 한 null 값을 반환할 수 없다는 보장을 제공한다. 널 안전성은 개발자가 널 포인터 예외(흔하지만 디버깅하기 어려운 오류)를 발생시키는 것을 방지한다. Dart 3.0부터는 모든 코드가 안전한 널 안전성을 따라야 한다.4. 활용
다트(Dart)는 다양한 방식으로 활용된다.
- 웹 개발: 다트는 `dart2js` 컴파일러를 통해 자바스크립트로 컴파일되어 주요 웹 브라우저에서 실행될 수 있다. 컴파일된 코드는 최적화를 통해 직접 작성한 자바스크립트 코드보다 더 빠르게 실행될 수도 있다.[95]
- 독립 실행: 다트 SDK에는 독립 실행형 다트 VM이 포함되어 있어, 명령줄 인터페이스 환경에서 다트 코드를 실행할 수 있다.
- 사전 컴파일(AOT): 다트 코드는 기계어로 AOT 컴파일될 수 있다. 플러터로 구축된 모바일 앱은 AOT 컴파일된 다트 코드로 앱 스토어에 배포된다.[97]
- 네이티브: 다트 2.6부터 `dart2native` 컴파일러를 사용하여 독립 실행형 네이티브 실행 코드로 컴파일할 수 있다.
2011년 11월 18일 구글은 ''Dart Editor''를 출시했지만,[50] 2015년 4월 18일 지원을 중단했다.[52] 현재는 https://dartpad.dev DartPad라는 온라인 에디터와 다트 개발 도구(Dart DevTools)를 제공하며,[65][66] 안드로이드 스튜디오, IntelliJ IDEA 등 다양한 통합 개발 환경(IDE)에서 다트 플러그인을 지원한다.[53]
플러터는 구글이 제공하는 오픈 소스 멀티 플랫폼 앱 UI 프레임워크로 다트 언어를 기반으로 한다.[67]
4. 1. 배포 방식
종속성필요 여부
속도
속도