개요편집이의 제기
다트(Dart)는 구글(Google)이 개발한 객체 지향, 클래스 기반, 가비지 컬렉션을 지원하는 멀티 플랫폼 프로그래밍 언어이다. C 스타일 문법을 사용하며 네이티브 머신 코드, 자바스크립트(JavaScript), 웹어셈블리(WebAssembly)로 컴파일할 수 있다. 인터페이스, 믹스인(Mixin), 추상 클래스, 실체화된 제네릭(Reified Generics), 타입 추론 등을 지원한다. 2011년 10월 10~12일 덴마크 오르후스에서 열린 GOTO 컨퍼런스에서 처음 공개되었으며, 라르스 바크(Lars Bak)와 카스페르 룬드(Kasper Lund)가 프로젝트를 설립했다[1][3]. 초기에는 자바스크립트 대체 및 크로스 플랫폼 웹 개발을 목표로 했으나, 이후 모바일, 데스크톱, 서버, 백엔드까지 대상을 확장했다[2][3]. 최신 안정 버전은 3.13.7이다[3].
역사편집이의 제기
초기 공개와 1.0 출시
다트는 2011년 10월 GOTO 컨퍼런스에서 발표되었다. 당시 구글은 크롬(Chrome)에 다트 가상 머신(VM)을 내장해 자바스크립트 대체 언어로 추진하려 했으나, 웹 파편화 우려와 타 브라우저 벤더의 반대로 2015년 다트 1.9 릴리스와 함께 해당 계획을 철회했다[3]. 이후 다트 코드를 자바스크립트로 컴파일하는 방향으로 전략을 전환했다.
다트 1.0은 2013년 11월 14일 정식 출시되었다[3]. 초기 버전들은 1.1.1, 1.3.0, 1.8, 1.10.0, 1.12, 1.13, 1.17 등으로 이어졌으며[1], BSD 라이선스 하에 배포되었다[1].
2.0: 타입 시스템 재설계
2018년 8월 다트 2.0이 출시되면서 강력한 정적 타입 시스템이 도입되었다[3]. 기존 선택적 타입 시스템을 사운드(Sound) 타입 시스템으로 대체하고, 타입 추론을 강화해 컴파일 타임 안전성을 높였다. 이 버전부터 dart2js가 프로덕션용 자바스크립트 컴파일러로 자리잡았다[3].
네이티브 컴파일 확장: dart2native와 셀프 컨테이닝 실행 파일
2019년 11월 다트 2.6에서 dart2native 확장이 추가되어 리눅스, macOS, 윈도우 데스크톱 플랫폼으로 네이티브 컴파일이 가능해졌다[3]. 이를 통해 다트 SDK가 설치되지 않은 환경에서도 실행 가능한 셀프 컨테이닝(Self-contained) 실행 파일을 배포할 수 있게 되었다. 앞서 개발자들은 안드로이드나 iOS 기기에서만 도구를 만들 수 있었으나, 이 확장으로 데스크톱 CLI 도구 개발이 본격화되었다[3].
3.0: 사운드 널 세이프티와 언어 기능 확장
2023년 5월 다트 3.0이 출시되며 사운드 널 세이프티(Sound Null Safety)가 필수화되었다[3]. 변수가 명시적으로 널 가능 타입으로 선언되지 않는 한 널을 반환할 수 없도록 보장해, 널 포인터 예외를 컴파일 타임에 방지한다. 이 버전에서는 레코드(Records), 패턴(Patterns), 클래스 수정자(Class Modifiers) 등 새로운 언어 기능도 추가되었다[3][4].
웹어셈블리 지원
다트 3.4부터 웹어셈블리(WebAssembly) 컴파일을 지원한다[3][4]. WasmGC(WebAssembly Garbage Collection) 기능이 웹어셈블리 표준에 채택되어야 완전한 지원이 가능하며, 크롬 119부터 WasmGC를 지원한다. 파이어폭스 120 이상, 사파리, 마이크로소프트 엣지도 WasmGC 통합을 진행 중이다[3].
표준화
ECMA 인터내셔널은 기술 위원회 TC52를 구성해 다트 언어 표준화를 진행했다. 2014년 7월 제107차 총회에서 다트 언어 명세 1판이 ECMA-408로 승인되었으며, 이후 2014년 12월, 2015년 6월, 2015년 12월에 후속 판이 승인되었다[3]. 2021년 4월 9일 언어 명세 5판이 공개되었고(다트 2.10까지 포함), 6판 초안은 2.13까지의 구문을 다룬다[3].
기능과 사용법 개요편집이의 제기
언어 설계 철학과 패러다임
다트는 ALGOL 언어 계열에 속하며 C, 자바(Java), C#, 자바스크립트 등의 영향을 받았다[3]. 메서드 캐스케이드(Method Cascade) 문법은 스몰토크(Smalltalk)에서, 믹스인은 스트롱토크(Strongtalk)와 루비(Ruby)에서, 아이솔레이트(Isolate) 기반 동시성 모델은 얼랭(Erlang)의 액터 모델(Actor Model)에서 영감을 얻었다[3]. 2004년 길라드 브라차(Gilad Bracha)와 데이비드 웅가(David Ungar)가 제안한 미러 API(Mirror API) 개념이 리플렉션(Reflection) 구현에 반영되었다[3].
다트는 접근성(Approachable), 이식성(Portable), 생산성(Productive)을 세 가지 핵심 가치로 내세운다[4]. 일관되고 간결한 강타입 문법, 널 세이프티, 패턴 매칭 등 현대적 기능을 제공하며, AOT(Ahead-Of-Time) 컴파일로 네이티브 머신 코드(ARM, x64, RISC-V)를 생성해 즉각적인 시작 성능을 확보한다. 웹 대상으로는 성숙한 자바스크립트 및 웹어셈블리 컴파일러를 제공한다[4]. 핫 리로드(Hot Reload)로 실행 중인 앱에 코드 변경을 즉시 반영해 반복 개발 속도를 높인다[4].
타입 시스템과 널 세이프티
다트 2.12부터 도입된 사운드 널 세이프티는 변수가 널 가능 타입(Type?)으로 명시되지 않으면 런타임에 널이 될 수 없음을 보장한다[3][4]. 다트 3.0부터 모든 코드는 널 세이프티를 준수해야 한다[3]. 이를 통해 널 포인터 예외를 컴파일 타임에 차단한다. 타입 추론, 제네릭, 레코드, 패턴 매칭, 클래스 수정자(abstract, base, final, interface, mixin, sealed 등) 등 고급 타입 기능을 제공한다[4].
비동기 프로그래밍과 동시성
다트는 성숙한 async/await 구문과 Future, Stream 기반 비동기 프로그래밍을 지원한다[4]. 동시성을 위해 아이솔레이트(Isolate) 모델을 사용한다. 각 아이솔레이트는 독립적인 메모리 힙을 가지며 메시지 패싱으로 통신한다. 이는 얼랭의 프로세스 모델과 유사하다[3]. 다트 2부터 웹 플랫폼에서는 아이솔레이트 대신 웹 워커(Web Workers) 사용을 권장한다[3].
스냅샷(Snapshot)
다트 VM의 핵심 구성 요소인 스냅샷은 객체와 런타임 데이터를 직렬화한 파일이다[3]. 스크립트 스냅샷은 프로그램 코드와 의존성을 미리 파싱해 빠른 시작을 돕는다. 풀 스냅샷은 핵심 라이브러리를 미리 로드해 라이브러리 로딩 시간을 단축한다. 객체 스냅샷은 아이솔레이트 간 메시지 전달 시 직렬화/역직렬화에 사용된다[3].
컴파일 및 배포 타겟
다트는 여섯 가지 방식으로 앱을 배포할 수 있다[3].
#### 웹 배포: 자바스크립트와 웹어셈블리
다트 3부터 웹 배포 시 자바스크립트 또는 웹어셈블리를 선택할 수 있다[3].
자바스크립트 컴파일러 변천: 최초 dartc(다트 2.0에서 폐기) → frog(2013년 도입, 다트 작성, 2020년 폐기, Dart Frog 프레임워크와 무관) → dart2js(다트 2.0부터, 프로덕션용, 전체 명세 구현, 미니파이드 출력) → dartdevc(개발용, 사람이 읽기 쉬운 자바스크립트 출력)[3]. 2013년 다트 팀은 dart2js 출력 코드가 크롬 V8 엔진에서 델타블루(DeltaBlue) 벤치마크 기준 수작성 자바스크립트보다 빠르다고 발표했다[3]. 다트 2.18부터 dart2js와 dartdevc 명령줄 래퍼가 SDK 내부로 통합되어 webdev serve(개발, dartdevc 호출)와 webdev build(프로덕션, dart2js 호출)로 대체되었다[3].
웹어셈블리: 다트 3.4부터 WasmGC 지원을 통해 웹어셈블리 컴파일이 가능해졌다[3][4]. 크롬 119, 파이어폭스 120+, 사파리, 엣지에서 WasmGC 지원이 진행 중이다[3].
#### 네이티브 플랫폼 배포
다트는 macOS, 윈도우, 리눅스에서 명령줄 도구용 네이티브 머신 코드로 컴파일할 수 있다[3]. 플러터(Flutter) 프레임워크와 결합하면 iOS, 안드로이드, macOS, 윈도우, 리눅스, 웹까지 사용자 인터페이스를 갖춘 앱을 배포할 수 있다[3].
배포 모드:
- 셀프 컨테이닝 실행 파일(Self-contained executable): 지정된 다트 코드, 의존성, 소형 다트 런타임(타입 검사, 가비지 컬렉션 담당)을 포함한 네이티브 머신 코드. 아키텍처별로 컴파일되며 일반 네이티브 실행 파일처럼 배포 가능[3].
- AOT 모듈(Ahead-of-time module): 모든 의존 라이브러리와 패키지를 포함한 플랫폼별 모듈 생성. 컴파일 시간은 길지만 최고 성능 제공[3].
- JIT 모듈(Just-in-time module): 빠른 컴파일, 다트 VM 필요. 최초 실행 시 파싱된 클래스와 컴파일 코드를 메모리에 적재해 이후 실행 가속[3].
- 커널 모듈(Dart kernel module): 머신 독립적인 다트 중간 표현(Dart IR) 바이트코드 생성. 다트 VM이 있는 모든 아키텍처에서 동작. 이식성과 빠른 컴파일 장점, 성능은 AOT/JIT보다 낮음[3].
핵심 라이브러리와 패키지 생태계
다트 SDK는 dart:core, dart:async, dart:math, dart:convert, dart:io, dart:js_interop 등 완전한 표준 라이브러리를 포함해 커스텀 웹 서버 등 시스템 앱 작성이 가능하다[3][4]. 패키지 관리자 pub과 저장소 pub.dev를 통해 수천 개의 패키지를 활용할 수 있다[4]. 워크스페이스(모노레포 지원), 검증된 퍼블리셔, 보안 권고, 버전 관리 등 패키지 생태계 도구가 갖춰져 있다[4].
개발 도구와 에디터 지원
에디터 변천: 2011년 이클립스(Eclipse) 기반 다트 에디터 출시[3] → 2012년 이클립스 플러그인[3] → 2015년 다트 에디터 중단, 젯브레인(JetBrains) IDE(안드로이드 스튜디오, 인텔리제이 IDEA, 파이참, PHP스톰, 웹스톰) 플러그인 권장[3]. 현재 VS Code, 서브라임 텍스트(Sublime Text), 아톰(Atom), 이맥스(Emacs), 빔(Vim) 등 주요 에디터에서 플러그인 지원[3].
크롬 데브 에디터(Chrome Dev Editor): 2013년 크로미움 팀이 스파크(Spark) 코드명으로 시작, 폴리머(Polymer) 기반 GUI 위젯 라이브러리를 포함한 크롬 앱 기반 IDE. 2015년 깃허브로 이관 후 자유 소프트웨어로 전환, 2021년 4월 아카이브됨[3].
다트패드(DartPad): 2015년 초 공개된 온라인 IDE. 브라우저에서 다트 API 실험, 코드 실행, 문법 강조, 코드 분석, 코드 완성, 문서 조회, HTML/CSS 편집 가능[3][4].
다트 데브툴(Dart DevTools): 다트로 작성된 디버깅 및 성능 분석 도구 모음[3].
명령줄 도구(SDK 내장): dart, dart analyze, dart build, dart compile, dart create, dart doc, dart fix, dart format, dart info, dart install, dart pub, dart run, dart test, dartaotruntime 등[4]. 추가 도구로 build_runner, package:skills, webdev 제공[4].
정적 분석 도구는 린터 규칙, 분석기 플러그인, 진단 메시지, 타입 프로모션 실패 수정 등을 지원하며 커스터마이징 가능[4]. 테스팅, 웹 앱 디버깅, 프로파일링, 로깅 도구도 통합 제공[4].
상호 운용성
C, Objective-C/Swift, Java/Kotlin, 자바스크립트와의 상호 운용성을 제공한다[4]. 특히 자바스크립트 상호 운용성은 웹 개발 시 기존 JS 라이브러리 활용에 필수적이다[4].
생태계·커뮤니티편집이의 제기
플러터(Flutter)
구글이 다트, C, C++, 스키아(Skia)로 개발한 오픈소스 멀티 플랫폼 UI 프레임워크다[3]. 다트와 긴밀히 통합되어 단일 코드베이스로 모바일, 데스크톱, 웹 앱을 빌드·배포한다. 플러터 2.0(2021)에서 macOS, 리눅스, 윈도우 베타 지원 추가, 2.10에서 윈도우 프로덕션 지원, 3.0에서 모든 데스크톱 플랫폼 프로덕션 지원 달성[3]. 파이어베이스(Firebase) 연동, pub.dev 패키지 생태계 확장, 젯브레인 플러그인 지원[3].
패키지 저장소: pub.dev
공식 패키지 저장소로 수천 개의 패키지가 호스팅된다[4]. 다트 팀 패키지, 검증된 퍼블리셔, 보안 권고, 버전 관리, 커스텀 저장소 지원 등 엔터프라이즈급 기능 제공[4].
커뮤니티와 학습 자료
공식 사이트에서 언어 치트시트, 명세서, 다트 3 마이그레이션 가이드, 용어집, 서적, 동영상 강의 제공[4]. 블로그, 변경 로그, 문서 업데이트 소식으로 최신 동향 공유[4]. 다트와 플러터 MCP 서버, Genkit 다트 등 AI 연계 도구도 등장[4].
평가편집이의 제기
초기 반응과 논란
공개 초기 다트는 "웹 파편화" 우려로 복합적 평가를 받았다[3]. 크롬에 다트 VM 내장 계획이 타 브라우저 벤더 지지를 얻지 못해 2015년 철회되었으며, 이는 자바스크립트 컴파일 전략 전환의 계기가 되었다[3].
기술적 강점
- 성능:
dart2js출력 코드가 크롬 V8에서 수작성 자바스크립트보다 빠를 수 있음(델타블루 벤치마크 기준)[3]. AOT 컴파일로 네이티브 즉각 시작, JIT으로 개발 중 빠른 반복[3]. - 안전성: 사운드 널 세이프티로 널 포인터 예외 컴파일 타임 차단[3][4]. 강력한 정적 분석과 타입 시스템[4].
- 생산성: 핫 리로드, 풍부한 도구 체인(VS Code, 젯브레인 IDE, 다트패드, 데브툴), 일관된 문법[4].
- 이식성: 단일 언어·코드베이스로 웹(JS/Wasm), 모바일, 데스크톱, 서버, CLI 타겟팅[3][4].
- 생태계: 플러터라는 킬러 프레임워크, 성숙한 패키지 생태계(pub.dev), 구글의 지속적 투자[3][4].
한계와 과제
- 웹어셈블리 완전 지원을 위한 WasmGC 표준화 및 브라우저 구현 대기 중(파이어폭스 버그, 사파리/엣지 통합 진행 중)[3].
- 웹 플랫폼에서 아이솔레이트 미지원(웹 워커 권장)[3].
- 초기 크롬 VM 내장 시도 실패로 인한 커뮤니티 신뢰 회복 과정 필요했음[3].
- 자료에 명시된 구체적 벤치마크나 비교 평가 데이터는 델타블루 사례 외 제한적임.
전반적으로 다트는 초기 웹 대체 언어 시도를 넘어, 플러터와 결합한 크로스 플랫폼 앱 개발 주력 언어로 자리잡았으며, 널 세이프티·패턴 매칭·웹어셈블리 등 현대 언어 기능을 지속적으로 흡수하며 진화 중이다[3][4].
이 문서는 GGWiki AI가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.
