🎯

Introduction to Dart

Client-optimized programming language by Google

Dart is Google's foundation language for Flutter, enabling iOS, Android, Web, and Desktop apps from a single codebase. It is a class-based OOP language with type inference, Null Safety, JIT compilation for Hot Reload, and AOT compilation for native performance.

Dartλž€ 무엇인가?

DartλŠ” Googleμ—μ„œ κ°œλ°œν•œ ν΄λΌμ΄μ–ΈνŠΈ μ΅œμ ν™” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ, λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λΉ λ₯΄κ³  μ•ˆμ •μ μΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Flutter ν”„λ ˆμž„μ›Œν¬μ˜ 기반 언어이며, ν•˜λ‚˜μ˜ μ½”λ“œλ² μ΄μŠ€λ‘œ iOS, Android, Web, Desktop 앱을 λ§Œλ“€ 수 있게 ν•΄μ€λ‹ˆλ‹€.

Dart의 역사

연도 이벀트
2011Google I/Oμ—μ„œ Dart ν”„λ‘œμ νŠΈ λ°œν‘œ
2013Dart 1.0 정식 μΆœμ‹œ
2018Dart 2.0 β€” νƒ€μž… μ•ˆμ „μ„± λŒ€ν­ κ°•ν™”
2021Dart 2.13 β€” Null Safety μ•ˆμ •ν™”
2023Dart 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 VMdart run main.dartJIT 컴파일, 개발 μ‹œ μ‚¬μš©
Flutterflutter runλͺ¨λ°”일/λ°μŠ€ν¬ν†±/μ›Ή μ•± μ‹€ν–‰
Web (JS)dart compile js main.dart -o main.jsJavaScript둜 λ³€ν™˜
Native AOTdart 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 νŒ¨ν‚€μ§€ μƒνƒœκ³„

Implementation Steps

1

Dart is statically typed with type inference β€” var name = 'Hong' auto-infers to String

2

Everything is an object β€” int, bool, functions, even null are all objects

3

Dual JIT (dev) + AOT (prod) compilation β€” fast dev with Hot Reload and native performance

4

Practice directly in browser with DartPad at dart.dev

Pros

  • Single language for 6 platforms
  • Rich standard library (collections, async, file I/O, HTTP)

Cons

  • Smaller ecosystem compared to JS/TS
  • Limited use outside Flutter

Use Cases

When you want to understand Dart before starting Flutter When transitioning from JavaScript, Java, Swift to Dart