728x90
Flutter 모바일 개발을 위해 Dart를 이해하는 것은 매우 중요합니다. Flutter는 Google이 개발한 Dart 언어를 사용하여 UI를 빌드하고, 모바일 앱을 개발하는 데 최적화된 언어입니다.
Dart에 대한 기본 개념부터 Flutter 개발에 필수적인 내용을 정리해 보겠습니다.
Dart의 역사
Dart는 Google이 개발한 프로그래밍 언어로, 웹 및 모바일 애플리케이션 개발을 목적으로 설계되었습니다. Dart의 발전 과정과 주요 변화들을 정리해 보겠습니다.
1. Dart의 탄생 (2011년)
- 발표일: 2011년 10월 10일
- 개발사: Google
- 목적:
- JavaScript의 대체 언어로서 웹 개발을 쉽게 만들기 위함
- 정적 및 동적 타입을 모두 지원하는 유연한 프로그래밍 언어 제공
- Dart 최초 발표자:
- Lars Bak: V8 JavaScript 엔진 개발자
- Kasper Lund: Google 엔지니어
- 초기 목표:
- 웹 브라우저에서 실행 가능한 JavaScript 대체 언어
- 빠른 성능과 확장성을 가진 프로그래밍 환경 제공
2. 초기 성장과 도전 (2011~2017년)
- Dart 1.0 출시 (2013년 11월 14일)
- 정식 버전으로 출시되며, 웹 개발을 위한 dart2js(Dart → JavaScript 변환) 컴파일러 제공
- 구글 크롬에서 'Dart VM' 지원 추진 (2013~2015년)
- Google은 Dart를 웹 브라우저에서 직접 실행하기 위한 'Dart VM'을 크롬에 내장하려 했으나, JavaScript의 강력한 생태계를 넘어서기 어려웠음.
- 결국 2015년 크롬에서 Dart VM 제거 결정
- 이후, Dart → JavaScript 변환 방식 (dart2js) 을 주요 방식으로 변경
- Dart의 방향 전환 (2015~2017년)
- Dart는 점점 서버 및 모바일 개발로 관심을 돌림
- Google 내부에서도 Dart 활용이 감소하면서 언어의 미래가 불확실했음
3. Flutter와의 결합 (2017년 이후)
- Flutter 프레임워크 발표 (2017년)
- Dart는 Flutter의 공식 언어로 선택되며 새로운 전환점을 맞음
- Flutter는 모바일 UI 개발을 위한 크로스플랫폼 프레임워크로서, Dart의 빠른 JIT 컴파일과 AOT 컴파일을 활용하여 성능을 최적화
- Dart 2.0 출시 (2018년 8월 7일)
- Flutter에 최적화된 형태로 Dart가 발전
- Strong Mode 도입 → 정적 타입 시스템 강화
- dart2js 개선 → JavaScript 변환 성능 최적화
- Flutter 1.0 정식 출시 (2018년 12월)
- Dart는 Flutter와 함께 급속도로 성장
- 모바일 앱 개발자들이 Dart를 배우기 시작
4. Dart의 주요 발전 (2019~현재)
- Dart 2.7 (2019년 12월)
- extension methods 도입
- 새로운 null safety 지원 예고
- Dart 2.12 (2021년 3월)
- Null Safety 정식 도입 → Null 관련 오류 감소
- dart compile 도입 → AOT 컴파일을 통한 성능 향상
- Dart 3.0 (2023년 5월)
- null safety 완전 필수화
- Records, Patterns, Class modifiers 도입
- Flutter와의 동반 성장
- Dart는 모바일, 웹, 데스크톱, 서버 개발을 지원하는 언어로 발전
- Flutter의 인기가 상승하며 Dart도 널리 사용됨
5. 현재와 미래
- Dart는 Flutter와 함께 모바일 및 멀티플랫폼 개발 언어로 자리 잡음
- 웹, 데스크톱, 서버 개발에서도 활용도가 증가하고 있음
- Google은 Dart를 더욱 최적화하여 빠르고 효율적인 크로스플랫폼 언어로 발전시키고 있음
728x90
Dart의 특징
- JIT(Just-in-Time) 및 AOT(Ahead-of-Time) 컴파일
- JIT: 개발 중 빠른 Hot Reload 지원
- AOT: 최적화된 성능 제공 (빌드 시 네이티브 코드로 컴파일)
- Garbage Collection 지원
- 메모리 관리 자동화
- 클래스 기반 객체지향 언어
- Java, Kotlin과 유사한 객체지향 패러다임 제공
- 비동기 프로그래밍 지원 (async/await, Future, Stream)
- UI가 멈추지 않도록 비동기 처리 가능
- Type Safety & Null Safety
- 타입 안정성 및 Null Safety 지원 (Dart 2.12 이후)
1. Dart의 주요 컴파일 방식
Dart 언어는 다양한 실행 환경을 지원하는 독특한 컴파일 플랫폼을 가지고 있습니다. Dart는 JIT(Just-In-Time) 및 AOT(Ahead-Of-Time) 컴파일을 모두 지원하며, JavaScript로 변환(dart2js)하여 웹에서도 실행할 수 있습니다.
Dart는 3가지 주요 컴파일 방식을 제공합니다.
컴파일 방식 | 설명 | 사용 사례 |
JIT (Just-In-Time) 컴파일 | 실행 시 즉시 컴파일하여 빠른 개발 가능 | 개발 환경 (Hot Reload, Flutter) |
AOT (Ahead-Of-Time) 컴파일 | 사전에 네이티브 코드로 변환하여 최적화된 실행 속도 제공 | 배포용 모바일 앱 (Flutter) |
dart2js (Dart → JavaScript 변환) | Dart 코드를 JavaScript로 변환하여 웹에서 실행 | 웹 개발 |
2. 컴파일 방식별 특징
(1) JIT 컴파일 (Just-In-Time)
- 설명: 실행 중에 코드를 즉석에서 컴파일하는 방식
- 특징:
- 빠른 코드 실행 (인터프리터 방식보다는 빠름)
- 개발 중 Hot Reload 지원 → Flutter 개발 속도 향상
- 최적화된 성능보다는 개발 편의성에 초점
- 사용 환경:
- Flutter 개발 환경
- Dart VM에서 실행되는 앱 (예: 서버, CLI 프로그램)
🔹 예제: JIT 실행
dart run main.dart
- Dart 스크립트 실행 시 JIT 컴파일을 사용하여 즉시 실행됨.
(2) AOT 컴파일 (Ahead-Of-Time)
- 설명: Dart 코드를 사전에 네이티브 코드로 변환하여 실행하는 방식
- 특징:
- 앱 실행 속도가 빠름 (Flutter에서 네이티브 성능 제공)
- 실행 파일 크기가 줄어듦
- JIT처럼 Hot Reload 지원 X
- 사용 환경:
- Flutter 모바일 앱 배포
- 서버 애플리케이션 배포
- CLI 애플리케이션 실행 파일 생성
🔹 예제: AOT 컴파일 실행 파일 생성
dart compile exe main.dart
./main # 실행 가능
- dart compile exe 명령어를 사용하면 네이티브 실행 파일로 변환 가능.
(3) dart2js (Dart → JavaScript 변환)
- 설명: Dart 코드를 JavaScript 코드로 변환하여 웹 브라우저에서 실행 가능
- 특징:
- 웹 개발을 위해 필요 (Flutter Web)
- JavaScript와의 호환성 유지
- 변환된 코드의 크기가 커질 수 있음
- 사용 환경:
- Flutter Web
- 기존 JavaScript 기반 웹 개발
🔹 예제: Dart → JavaScript 변환
dart compile js main.dart
- Dart 코드를 JavaScript로 변환하여 웹에서 실행 가능.
3. Dart의 실행 환경
Dart는 다양한 환경에서 실행 가능하며, 컴파일 방식도 환경에 맞춰 다르게 동작합니다.
실행 환경 | 컴파일 방식 | 사용 도구 |
Flutter 모바일 앱 | AOT 컴파일 | flutter build apk/ios |
Flutter 개발 (Hot Reload) | JIT 컴파일 | flutter run |
웹 브라우저 (Flutter Web) | dart2js (Dart → JavaScript 변환) | flutter build web |
서버 (Dart VM) | JIT 또는 AOT | dart run, dart compile exe |
CLI 프로그램 (터미널 실행 파일) | AOT 컴파일 | dart compile exe |
Dart 기본 문법 형식
Dart는 C 계열 언어(Java, C#, JavaScript)와 유사한 문법을 가집니다.
(1) 변수 선언
void main() {
int age = 25;
double height = 178.5;
String name = "Flutter";
bool isFlutterAwesome = true;
print("Name: $name, Age: $age, Height: $height, Awesome: $isFlutterAwesome");
}
- var 키워드를 사용하면 타입을 추론하여 자동 지정됩니다.
- final과 const를 사용하여 상수를 선언할 수 있습니다.
final String country = "Korea"; const double pi = 3.1415;
(2) 함수 선언
int add(int a, int b) {
return a + b;
}
void main() {
print(add(3, 5)); // 8
}
- 화살표 함수(=>)로 간결하게 작성 가능
int multiply(int a, int b) => a * b;
(3) 조건문과 반복문
void main() {
int score = 85;
if (score >= 90) {
print("A");
} else if (score >= 80) {
print("B");
} else {
print("C");
}
for (int i = 0; i < 5; i++) {
print("i: $i");
}
}
- for, while, do-while 루프 제공
(4) 클래스와 객체
class Person {
String name;
int age;
Person(this.name, this.age);
void sayHello() {
print("Hi, my name is $name and I'm $age years old.");
}
}
void main() {
Person p1 = Person("John", 30);
p1.sayHello();
}
- this.name, this.age를 사용해 생성자를 간결하게 선언 가능
(5) 비동기 프로그래밍
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2));
return "Data loaded";
}
void main() async {
print("Start loading...");
String data = await fetchData();
print(data);
}
- async/await을 사용하여 비동기 코드를 동기처럼 작성 가능
728x90
'Flutter for Beginners' 카테고리의 다른 글
Dart의 컬렉션(Collection) (0) | 2025.02.19 |
---|---|
Dart의 dynamic 변수 타입 (0) | 2025.02.18 |
Dart 기초 문법 (0) | 2025.02.18 |
Dart 실습 환경 (0) | 2025.02.18 |
Flutter 개발 환경 설정하기 (0) | 2025.02.17 |