Dart
기본 정보
- 이름: Dart
- 분류: 객체지향 프로그래밍 언어
- 개발사: Google
- 최초 공개: 2011년
- 주요 용도: Flutter 앱 개발, 웹 개발, 서버 개발
- 관련 주제: #Dart #Flutter #객체지향 #모바일개발
개요
Dart는 Google이 개발한 객체지향 프로그래밍 언어이다.
Flutter의 공식 개발 언어로 사용되며, 하나의 코드로 Android, iOS, Windows, macOS, Linux, Web 애플리케이션을 개발할 수 있도록 설계되었다.
간결한 문법과 높은 생산성을 제공하며, JIT(Just-In-Time)와 AOT(Ahead-Of-Time) 컴파일을 모두 지원하여 개발 속도와 실행 성능을 동시에 확보할 수 있다.
주요 특징
- 객체지향 프로그래밍 지원
- 정적 타입 지원
- Null Safety 지원
- JIT/AOT 컴파일
- 비동기 프로그래밍 지원
- Hot Reload 지원(Flutter)
- 크로스 플랫폼 개발 가능
실행 구조
Dart Source
↓
Compiler
↓
Flutter Engine
↓
Android
iOS
Windows
macOS
Linux
Web
Hello World
void main() {
print("Hello Dart");
}
변수
String name = "구름";
int age = 30;
double score = 99.5;
bool admin = true;
자동 타입 추론
var title = "Flutter";
final year = 2026;
const pi = 3.141592;
데이터 타입
기본형
- int
- double
- bool
- String
컬렉션
- List
- Set
- Map
기타
- dynamic
- Object
Null Safety
String? nickname;
nickname = "Cloud";
Null이 허용되는 변수는 ?를 사용한다.
조건문
if (age >= 20) {
print("성인");
} else {
print("미성년자");
}
반복문
for
for (int i = 0; i < 5; i++) {
print(i);
}
for-in
List<String> list = [
"A",
"B",
"C"
];
for (var item in list) {
print(item);
}
함수
int add(int a, int b) {
return a + b;
}
화살표 함수
int add(int a, int b) => a + b;
간단한 함수를 한 줄로 작성할 수 있다.
클래스
class User {
String name;
int age;
User(this.name, this.age);
}
객체 생성
User user = User(
"구름",
30,
);
생성자
class User {
User();
}
Named Constructor도 지원한다.
상속
class Animal {
}
class Dog extends Animal {
}
믹스인(Mixin)
mixin Fly {
void flying(){}
}
다중 상속 대신 기능을 재사용할 수 있다.
비동기 처리
Future
Future<String> load() async {
return "Hello";
}
async / await
Future<void> run() async {
await load();
}
Flutter 개발에서 매우 자주 사용된다.
컬렉션
List
List<int> numbers = [
1,
2,
3
];
Map
Map<String, dynamic> user = {
"name":"구름",
"age":30
};
Set
Set<String> names = {
"A",
"B"
};
중복을 허용하지 않는다.
JSON
jsonDecode(response.body);
jsonEncode(data);
REST API 개발에서 자주 사용된다.
예외 처리
try {
}
catch(e){
print(e);
}
패키지 관리자
Dart는 pub를 사용하여 패키지를 관리한다.
설치
dart pub add dio
Flutter에서는 flutter pub get 명령을 사용한다.
주요 라이브러리
- dio
- http
- intl
- freezed
- json_serializable
- equatable
- riverpod
- provider
JIT와 AOT
JIT
- 개발 시 사용
- Hot Reload 지원
- 빠른 디버깅
AOT
- 배포 시 사용
- 빠른 실행 속도
- 최적화된 바이너리 생성
주요 활용 분야
- Flutter 앱 개발
- 웹 애플리케이션
- 서버 개발
- CLI 프로그램
- 자동화 도구
장점
- 문법이 간결함
- Null Safety 지원
- 객체지향 설계
- Flutter와 완벽한 호환
- 높은 생산성
- 빠른 실행 성능
단점
- Flutter 외 사용 사례가 상대적으로 적음
- 생태계가 JavaScript나 Python보다 작음
- Dart 문법을 별도로 학습해야 함
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- Null Safety 활성화
const와final적극 활용- Feature 기반 폴더 구조 적용
async/await사용freezed로 불변 객체 생성json_serializable로 모델 자동 생성dio로 API 통신- Riverpod 기반 상태 관리
- Clean Architecture 적용
- 테스트 코드 작성
Dart와 함께 사용하는 기술
대표 개발 도구
- Visual Studio Code
- Android Studio
- IntelliJ IDEA
- Dart DevTools
관련 문서
출처
- Dart 공식 홈페이지
- Dart Language Tour
- Flutter 공식 문서