Dart 시작하기
What is Dart?
Dart란 구글이 앱을 위해 디자인한 프로그래밍 언어로 크로스플랫폼 웹 프레임워크인 Flutter의 주력 언어이다.
Dart는 객체지향이면서 C언어와 유사한 문법을 가지고 있다. 또한 실행 중인 앱에 즉시 결과를 보여주는 hot reload를 사용해서 개발 생산성을 높일 수 있다. 그리고 AOT 컴파일로 네이티브 코드를 생성하기 때문에 모든 플랫폼에서 빠른 속도를 제공한다.
Quick Start
Dartpad는 공식적으로 제공되는 웹 에디터이다. 코드를 저장할 수는 없기 때문에 실제 개발용으로 사용하기엔 무리지만 간단한 로직 테스트로는 훌륭하다. 그러므로 이번 글에선 Dartpad를 사용하도록 하겠다.
DartPad
dartpad.dartlang.org
Dart basic
Dart는 맨 처음 시작 시 main 함수부터 찾게 된다.
1) 주석
C와 Java 등과 동일하게 // 그리고 /* */을 사용한다.
void main() {
// 한 줄 주석
/*여러 줄 주석*/
}
2) 변수
int(정수형), double(실수형), string(문자열), bool(논리형), list(배열), set, map, runes, symbol, null을 기본적으로 지원한다.
또는 Javascript나 Python처럼 var을 사용해 선언해주는 것 또한 가능하다.
void main() {
String name = "홍길동";
int age = 25;
double grade = 3.75;
bool married = false;
List<String> liked = ["잠자기","게임하기"];
print("이름 : " + name.toString());
print("나이 : " + age.toString());
print("학점 : " + grade.toString());
print("혼인 : " + married.toString());
print("좋아하는것 : " + liked.toString());
}
3) 제어문
여타 언어의 제어문과 큰 차이점은 없다. if / else 문, 삼항 연산자, swith/case문, for문, while문을 지원한다.
if (year >= 2001) {
print('21st century');
} else if (year >= 1901) {
print('20th century');
}
for (var object in flybyObjects) {
print(object);
}
for (int month = 1; month <= 12; month++) {
print(month);
}
while (year < 2016) {
year += 1;
}
4) 함수
Dart는 완전한 객체지향 언어이며, Dart에서 모든 것이 객체이기 때문에 함수 또한 객체이다.
변수가 함수를 참조할 수 있고, 함수의 인자로 함수를 전달받을 수 있다.
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
var result = fibonacci(20);
dart에서 함수의 특징은 아래와 같다.
-변수가 함수 참조 가능
void main() {
var name = getName();
print('name == $name');
}
getName() {
return 'name';
}
-다른 함수의 인자로 함수 전달 가능
mul() 함수 첫 번째 매개변수에 add(), 두 번째 매개변수에 sub()를 넘겨주었다.
void main() {
int a = 10;
int b = 5;
print('${a+b} * ${a-b} = ${mul(add(a,b), sub(a,b)}}');
}
int add(int a,int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int mul(int a,int b) {
return a*b;
}
-이름 있는 선택 매개변수
매개변수명으로 인자 값을 넘겨줄 매개변수는 {}로 감싸줘야 한다.
만약 {}로 감싸지 않은 필수 매개변수는 누락하면 오류가 생긴다.
void printPerson({String name = '철수', int age = 10}) {
print('$name은 $age살입니다.');
}
void main() {
printPerson(name: '영희', age: 20);
printPerson(name: '영희');
printPerson(age: 20);
printPerson();
}
-위치적 선택 매개변수
이름 있는 선택 매개변수와 거의 비슷하다.
[]로 감싸주는 차이이며, 위치에 맞지 않는 매개변수를 넘겨주면 오류가 생긴다.
-익명 함수 및 람다
// 익명함수
(매개변수명) {표현식;};
(a,b) {a+b;};
// 람다
(매개변수명) => 표현식;
(a,b) => a -b;
5) 클래스
class키워드를 통해 객체를 만들며 신규 생성 시 new 키워드를 이용한다. 상속은 extends 키워드를 사용한다.