# Dart 소개 ## Dart란 무엇인가? Dart는 Google에서 개발한 클라이언트 최적화 프로그래밍 언어로, 모든 플랫폼에서 빠르고 안정적인 애플리케이션을 개발하기 위해 설계되었습니다. Dart는 Flutter 프레임워크의 기반이 되는 언어이며, 웹, 모바일, 데스크톱 애플리케이션을 개발하는 데 사용됩니다. ## Dart의 역사 - **2011년**: Google I/O에서 처음 발표 - **2013년**: Dart 1.0 출시 - **2018년**: Dart 2.0 출시 (타입 안전성 강화) - **2021년**: Dart 2.13 출시 (null 안전성 도입) - **2023년**: Dart 3.0 출시 (레코드, 패턴 매칭 도입) Dart는 초기에 JavaScript를 대체하기 위한 웹 프로그래밍 언어로 시작했지만, 현재는 Flutter를 통한 크로스 플랫폼 애플리케이션 개발에 주로 사용됩니다. ## Dart의 주요 특징 ### 1. 객체 지향 언어 Dart는 클래스 기반의 객체 지향 언어입니다. 모든 것이 객체이며, 모든 객체는 클래스의 인스턴스입니다. 심지어 함수와 `null`도 객체입니다. ```dart class Person { String name; int age; Person(this.name, this.age); void introduce() { print('안녕하세요, 저는 $name이고 $age살입니다.'); } } void main() { final person = Person('홍길동', 30); person.introduce(); // 출력: 안녕하세요, 저는 홍길동이고 30살입니다. } ``` ### 2. 강력한 타입 시스템 Dart는 정적 타입 언어이지만, 타입 추론을 지원하여 타입 명시를 생략할 수 있습니다. ```dart // 타입 명시 String name = '홍길동'; int age = 30; // 타입 추론 var name = '홍길동'; // String으로 추론 var age = 30; // int로 추론 final height = 175.5; // double로 추론 ``` ### 3. 비동기 프로그래밍 지원 Dart는 `Future`, `Stream`, `async`, `await` 등을 통해 비동기 프로그래밍을 자연스럽게 지원합니다. ```dart Future fetchData() async { // 비동기 작업 시뮬레이션 await Future.delayed(Duration(seconds: 2)); return '데이터'; } void main() async { print('데이터 요청 시작'); final data = await fetchData(); print('받은 데이터: $data'); } ``` ### 4. Null 안전성 Dart 2.12부터 Null 안전성을 도입하여, 변수가 null이 될 수 있는지 여부를 타입 시스템에서 명시합니다. ```dart // null이 될 수 없는 변수 String name = '홍길동'; // name = null; // 컴파일 오류 // null이 될 수 있는 변수 String? nullableName = '홍길동'; nullableName = null; // 허용됨 ``` ### 5. 다중 플랫폼 지원 Dart는 여러 플랫폼에서 실행될 수 있습니다: - **네이티브 플랫폼**: Dart는 AoT(Ahead-of-Time) 컴파일을 통해 네이티브 바이너리로 컴파일됩니다. Flutter 앱은 이 방식으로 배포됩니다. - **웹 플랫폼**: Dart는 JavaScript로 컴파일되어 브라우저에서 실행됩니다. - **개발 환경**: Dart는 JIT(Just-in-Time) 컴파일을 통해 개발 중 핫 리로드와 같은 기능을 제공합니다. ### 6. 풍부한 표준 라이브러리 Dart는 다양한 기능을 제공하는 풍부한 표준 라이브러리를 포함하고 있습니다: - 컬렉션 (`List`, `Map`, `Set` 등) - 비동기 처리 (`Future`, `Stream`) - 파일 I/O - HTTP 클라이언트 - 정규 표현식 - 직렬화 지원 ## Dart 실행 환경 Dart 코드는 다양한 환경에서 실행될 수 있습니다: ### 1. Dart VM Dart Virtual Machine(VM)은 Dart 코드를 직접 실행하는 환경으로, 개발 중 코드를 빠르게 실행하고 디버깅할 수 있습니다. ```bash dart run main.dart ``` ### 2. Flutter Flutter는 Dart를 사용하여 크로스 플랫폼 모바일 애플리케이션을 개발하는 프레임워크입니다. ```bash flutter run ``` ### 3. Web (Dart2JS) Dart 코드는 JavaScript로 컴파일되어 웹 브라우저에서 실행될 수 있습니다. ```bash dart compile js main.dart -o main.js ``` ### 4. Native (Native AOT) Dart 코드는 네이티브 바이너리로 컴파일되어 독립 실행 파일로 배포될 수 있습니다. ```bash dart compile exe main.dart -o main ``` ## Dart 패키지 생태계 Dart는 `pub.dev`라는 공식 패키지 저장소를 통해 풍부한 패키지 생태계를 제공합니다. 이 저장소에는 다양한 기능을 제공하는 수천 개의 오픈 소스 패키지가 있습니다. 패키지를 프로젝트에 추가하려면 `pubspec.yaml` 파일에 의존성을 추가합니다: ```yaml dependencies: http: ^1.0.0 path: ^1.8.0 ``` 그리고 다음 명령으로 패키지를 설치합니다: ```bash dart pub get ``` ## Dart와 다른 언어 비교 ### Java와 비교 ```dart // Dart class Person { String name; int age; Person(this.name, this.age); void sayHello() { print('Hello, I am $name'); } } // Java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, I am " + name); } } ``` ### JavaScript와 비교 ```dart // Dart void main() { final list = [1, 2, 3, 4, 5]; final doubled = list.map((item) => item * 2).toList(); print(doubled); // [2, 4, 6, 8, 10] } // JavaScript function main() { const list = [1, 2, 3, 4, 5]; const doubled = list.map(item => item * 2); console.log(doubled); // [2, 4, 6, 8, 10] } ``` ### Swift와 비교 ```dart // Dart class Person { String name; int? age; Person(this.name, {this.age}); } // Swift class Person { let name: String var age: Int? init(name: String, age: Int? = nil) { self.name = name self.age = age } } ``` ## Dart의 장점 1. **통합 개발 환경**: 단일 언어로 모바일, 웹, 데스크톱 앱을 개발할 수 있습니다. 2. **생산성**: 핫 리로드, 풍부한 도구, 직관적인 문법으로 개발 생산성을 높입니다. 3. **성능**: AoT 컴파일을 통해 네이티브 성능에 가까운 실행 속도를 제공합니다. 4. **안정성**: 강력한 타입 시스템과 null 안전성으로 많은 런타임 오류를 방지합니다. 5. **확장성**: 표준 라이브러리와 풍부한 패키지 생태계를 통해 다양한 기능을 추가할 수 있습니다. ## Dart 개발 환경 설정 ### VS Code에서 Dart 개발 환경 설정 1. Dart SDK 설치 (Flutter SDK를 설치했다면 이미 포함되어 있습니다) 2. VS Code 설치 3. Dart 확장 프로그램 설치 4. 새 Dart 프로젝트 생성: ```bash dart create my_dart_project ``` 5. VS Code에서 프로젝트 열기 6. `main.dart` 파일 실행하기: F5 또는 "Run" 버튼 클릭 ## 결론 Dart는 현대적인 애플리케이션 개발을 위한 강력하고 유연한 프로그래밍 언어입니다. 특히 Flutter와 함께 사용하면, 단일 코드베이스로 고품질의 크로스 플랫폼 애플리케이션을 개발할 수 있습니다. 다음 장에서는 Dart의 기본 문법과 변수에 대해 더 자세히 알아보겠습니다.