Dart紹介
Googleが作ったクライアント最適化プログラミング言語
DartはGoogleが作ったFlutterの基盤言語で、単一コードベースでiOS、Android、Web、Desktopアプリを作れます。クラスベースのOOP言語で、型推論とNull Safetyをサポートし、JITコンパイルでHot Reload、AOTコンパイルでネイティブ性能を同時達成します。
Dart란 무엇인가?
Dart는 Google에서 개발한 클라이언트 최적화 프로그래밍 언어로, 모든 플랫폼에서 빠르고 안정적인 애플리케이션을 개발하기 위해 설계되었습니다. Flutter 프레임워크의 기반 언어이며, 하나의 코드베이스로 iOS, Android, Web, Desktop 앱을 만들 수 있게 해줍니다.
Dart의 역사
| 연도 | 이벤트 |
|---|---|
| 2011 | Google I/O에서 Dart 프로젝트 발표 |
| 2013 | Dart 1.0 정식 출시 |
| 2018 | Dart 2.0 — 타입 안전성 대폭 강화 |
| 2021 | Dart 2.13 — Null Safety 안정화 |
| 2023 | Dart 3.0 — Records, 패턴 매칭 도입 |
객체 지향 프로그래밍 예제
Dart는 클래스 기반 객체 지향 언어입니다. 아래 예제에서 생성자 축약 문법(this.name)과 문자열 보간($name)을 확인할 수 있습니다.
class Person {
String name;
int age;
Person(this.name, this.age);
void introduce() {
print('안녕하세요, 저는 $name이고 $age살입니다.');
}
}
void main() {
final person = Person('홍길동', 30);
person.introduce();
}
타입 시스템 — 명시적 타입 vs 타입 추론
Dart는 정적 타입 언어이면서도 var 키워드로 타입 추론을 지원합니다. final은 한 번만 할당 가능한 런타임 상수입니다.
// 명시적 타입 지정
String name = '홍길동';
int age = 30;
// 타입 추론 (var, final)
var name = '홍길동'; // String으로 자동 추론
var age = 30; // int로 자동 추론
final height = 175.5; // double, 재할당 불가
Null Safety
Dart 2.12부터 도입된 Null Safety는 null 관련 런타임 에러를 컴파일 타임에 방지합니다. ?를 붙이면 nullable, 붙이지 않으면 non-nullable 타입입니다.
// Non-nullable — null 할당 불가
String name = '홍길동';
// Nullable — null 할당 가능
String? nullableName = '홍길동';
nullableName = null; // OK
⚠ Null Safety 연산자 정리
?.— 조건부 접근 (null이면 null 반환)??— null 병합 (null이면 기본값 사용)!— non-null 단언 (위험, 런타임 에러 가능)??=— null이면 할당
비동기 프로그래밍 (async/await)
Dart는 Future와 async/await를 기본 지원하여 비동기 작업을 동기 코드처럼 깔끔하게 작성할 수 있습니다.
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2));
return '데이터';
}
void main() async {
print('데이터 요청 시작');
final data = await fetchData();
print('받은 데이터: $data');
}
Dart 실행 환경
Dart는 다양한 실행 환경을 지원하며, 상황에 따라 적합한 컴파일 방식을 선택할 수 있습니다.
| 환경 | 명령어 | 설명 |
|---|---|---|
| Dart VM | dart run main.dart | JIT 컴파일, 개발 시 사용 |
| Flutter | flutter run | 모바일/데스크톱/웹 앱 실행 |
| Web (JS) | dart compile js main.dart -o main.js | JavaScript로 변환 |
| Native AOT | dart compile exe main.dart -o main | 네이티브 바이너리 생성 |
다른 언어와 비교
Java vs Dart — Dart는 생성자 축약과 문자열 보간으로 코드가 훨씬 간결합니다.
// Dart — Java보다 간결한 클래스 정의
class Person {
String name;
int age;
Person(this.name, this.age); // 생성자 축약
void sayHello() {
print('Hello, I am $name'); // 문자열 보간
}
}
JavaScript vs Dart — 함수형 스타일(map, filter 등)을 유사하게 지원하면서 타입 안전성을 제공합니다.
void main() {
final list = [1, 2, 3, 4, 5];
final doubled = list.map((item) => item * 2).toList();
print(doubled); // [2, 4, 6, 8, 10]
}
Swift vs Dart — Named parameter와 optional 타입 등 Swift와 유사한 문법을 가집니다.
class Person {
String name;
int? age; // nullable (Swift의 Optional과 유사)
Person(this.name, {this.age}); // named parameter
}
패키지 관리 (pub)
pubspec.yaml에 의존성을 추가하고 dart pub get으로 설치합니다. pub.dev에서 수천 개의 패키지를 탐색할 수 있습니다.
# pubspec.yaml
dependencies:
http: ^1.0.0
path: ^1.8.0
$ dart pub get
개발 환경 설정
-
✓
1단계 — Dart SDK 설치 (Flutter SDK에 포함되어 있음)
-
✓
2단계 — VS Code 설치 및 Dart 확장(extension) 추가
-
✓
3단계 — 프로젝트 생성:
dart create my_dart_project -
✓
4단계 — VS Code에서 프로젝트 열기 → F5 또는 Run 버튼으로 실행
Dart의 핵심 장점 요약
- ✓ 단일 코드베이스로 6개 플랫폼(iOS, Android, Web, macOS, Windows, Linux) 개발
- ✓ Hot Reload로 개발 생산성 극대화 (JIT 컴파일)
- ✓ AOT 컴파일로 네이티브 수준의 성능 달성
- ✓ 강력한 타입 시스템 + Null Safety로 런타임 에러 사전 방지
- ✓ 풍부한 표준 라이브러리와 pub.dev 패키지 생태계
実装ステップ
Dartは静的型言語で型推論をサポート — var name = 'ホン'は自動的にStringに推論
すべてがオブジェクト — int、bool、関数、nullまで全てオブジェクト扱い
JIT(開発)+AOT(デプロイ)二重コンパイル — Hot Reloadの高速開発とネイティブ性能を同時達成
dart.devのDartPadでブラウザから直接練習可能
メリット
- ✓ 単一言語で6プラットフォーム開発可能
- ✓ 豊富な標準ライブラリ(コレクション、非同期、ファイルI/O、HTTP)
デメリット
- ✗ JS/TSと比べてエコシステムが小さい
- ✗ Flutter以外の用途が限定的