다트 언어 가이드
2024년 11월 27일약 2 분기술문서
📚 Dart 언어 완벽 가이드
Dart는 Google에서 개발한 객체 지향 프로그래밍 언어로, 특히 Flutter 프레임워크와 함께 모바일 및 웹 애플리케이션 개발에 널리 사용됩니다. Dart는 간결한 문법과 강력한 기능을 제공하여 개발자들이 효율적으로 코드를 작성할 수 있도록 돕습니다.
기초 문법
메인 함수
Dart 프로그램은 main() 함수를 시작점으로 합니다. main() 함수는 반환 타입이 void이며, 다음과 같이 정의됩니다:
void main() {
// 코드 작성
}주석
Dart에서는 세 가지 형태의 주석을 지원합니다:
- 한 줄 주석:
// 한 줄 주석- 여러 줄 주석:
/* 여러 줄 주석 */- 문서화 주석:
/// 문서화 주석
/// DartDoc이나 IDE에서 문서로 인식됩니다.void main() {
// 한 줄 주석
/*
* 여러 줄 주석
*/
/// 문서화 주석
/// DartDoc이나 IDE에서 문서로 인식됩니다.
}변수 선언
Dart에서는 var, final, const 키워드를 사용하여 변수를 선언할 수 있습니다.
var: 타입 추론을 통해 변수의 타입을 결정합니다.
void main() {
var name = '홍길동';
print(name); // 홍길동
}final: 한 번만 값을 할당할 수 있으며, 런타임에 결정됩니다.
void main() {
final DateTime now = DateTime.now();
print(now);
}const: 컴파일 타임 상수로, 빌드 시에 값이 결정됩니다.
void main() {
const int age = 30;
print(age);
}데이터 타입
Dart의 주요 데이터 타입은 다음과 같습니다:
int: 정수double: 실수String: 문자열bool: 불리언List: 리스트Map: 맵Set: 집합
void main() {
int age = 25;
double height = 175.5;
String name = '홍길동';
bool isStudent = true;
List<String> fruits = ['사과', '바나나', '오렌지'];
Map<String, int> scores = {'국어': 90, '수학': 95};
Set<String> cities = {'서울', '부산', '대구'};
print(age);
print(height);
print(name);
print(isStudent);
print(fruits);
print(scores);
print(cities);
}컬렉션
리스트 (List)
리스트는 순서가 있는 요소들의 집합입니다.
void main() {
List<String> fruits = ['사과', '바나나', '오렌지'];
print(fruits[0]); // 사과
print(fruits.length); // 3
fruits.add('포도');
print(fruits); // [사과, 바나나, 오렌지, 포도]
}맵 (Map)
맵은 키-값 쌍으로 이루어진 컬렉션입니다.
void main() {
Map<String, int> scores = {'국어': 90, '수학': 95};
print(scores['국어']); // 90
scores['영어'] = 88;
print(scores); // {국어: 90, 수학: 95, 영어: 88}
}Set
void main() {
Set<int> uniqueNumbers = {1, 2, 3, 3};
print(uniqueNumbers); // {1, 2, 3}
}🔢 연산자
Dart는 다양한 산술, 비교, 논리, 비트 연산자를 제공합니다.
산술 연산자
void main() {
int a = 10, b = 5;
print(a + b); // 15
print(a - b); // 5
}Null 병합 연산자
void main() {
String? name;
print(name ?? "Unknown"); // Unknown
}🔄 제어문
if문
void main() {
int a = 10, b = 5;
if (a > b) {
print("a가 b보다 큽니다.");
} else {
print("a가 b보다 작거나 같습니다.");
}
}for문
void main() {
for (int i = 0; i < 5; i++) {
print(i);
}
}switch문
void main() {
int a = 1;
switch (a) {
case 1:
print("1입니다.");
break;
default:
print("기타");
}
}🔧 함수와 람다
Dart의 함수는 기본적으로 Named Parameters와 Optional Parameters를 지원합니다.
기본 함수
void example1() {
var name = '코드팩토리';
print(name);
}람다 함수
final result = numbers.map((num) => num * 2).toList();🔒 예외 처리
try..catch..finally
void main() {
int balance = 10000; // 잔액
int withdraw = 15000; // 출금 요청 금액
try {
if (withdraw > balance) {
throw Exception("잔액이 부족합니다."); // 에러 발생
}
balance -= withdraw;
print("출금 완료! 남은 잔액: $balance원");
} catch (e) {
print("출금 실패: $e");
} finally {
print("ATM 작업이 종료되었습니다.");
}
}🏛 클래스와 객체지향
클래스와 생성자
class Person {
final String name;
Person(this.name);
}상속
class Student extends Person {
Student(String name) : super(name);
}인터페이스
abstract class Animal {
void sound();
}
class Dog implements Animal {
@override
void sound() => print("멍멍");
}⏳ 비동기와 동기
Dart는 Future, async/await와 같은 비동기 프로그래밍을 지원합니다.
Future
Future<String> fetchData() async {
return "Data loaded!";
}async와 await
void main() async {
String data = await fetchData();
print(data);
}Stream
Stream은 Dart의 비동기 프로그래밍에서 중요한 개념으로, 연속적인 데이터 흐름을 처리하는 데 사용됩니다.
StreamController
Single-subscription StreamController
void main() {
final controller = StreamController<int>();
// Stream에 데이터를 추가
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
// Stream을 구독
controller.stream.listen((data) {
print('데이터: $data');
});
// Stream 닫기
controller.close();
}Broadcast StreamController
void main() {
final controller = StreamController<int>.broadcast();
// 리스너 1
controller.stream.listen((data) => print('Listener 1: $data'));
// 리스너 2
controller.stream.listen((data) => print('Listener 2: $data'));
// Stream에 데이터 추가
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.close();
}위 내용은 Dart 언어를 학습하는 데 있어 필수적인 요소를 포함하고 있으며, DartPad 또는 IDE를 통해 실습할 수 있습니다.
추가 자료:
기업자
abdulaziz박종열