본문 바로가기
Flutter for Beginners

Dart 알아보기

by Andrew's Akashic Records 2025. 2. 17.
728x90

Dart

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