GGWiki
새 문서
일반/위키

다트 (프로그래밍 언어)

공식 자료를 바탕으로 AI가 작성한 초안 · 출처 보기

편집 이의 제기 토론 수정 이력 역링크 토론에서 언급
다트 (프로그래밍 언어) 로고
다트 (프로그래밍 언어) 로고 · 이미지 출처 ↗

개요편집이의 제기

다트(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가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.

출처

4개
1Wikidata ↗https://www.wikidata.org/wiki/Q406009
2위키백과 (한국어) · 다트 (프로그래밍 언어) ↗https://ko.wikipedia.org/wiki/%EB%8B%A4%ED%8A%B8_%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4%29
3위키백과 (영어) · Dart (programming language) ↗https://en.wikipedia.org/wiki/Dart_%28programming_language%29
4공식 사이트 ↗https://dart.dev