Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-15 13:20
관리 메뉴

nomad-programmer

[Programming/Dart] 다트 언어 소개 및 연습 환경 본문

Programming/Dart

[Programming/Dart] 다트 언어 소개 및 연습 환경

scii 2020. 10. 6. 15:42

플러터 개발에는 다트 언어를 사용한다. 

다트 문법 온라인 메뉴얼

https://dart.dev/guides/language/language-tour

 

A tour of the Dart language

A tour of all of the major Dart language features.

dart.dev

다트 문법은 main() 함수가 진입점(entry point)이다. 

void main() {
    print('Hello, World!');
}

주석

// 이것도 주석

/*
이것도 주석
*/

/// 이것도 주석
void something() {}
  • // : 한줄 주석
  • /* ... */ : 여러줄 주석
  • /// : 문서 주석

///를 메소드나 클래스 정의 위에 작성하면 dartdoc과 같은 문서 생성 도구를 통해 문서를 자동으로 생성해준다.

https://dart.dev/tools/dartdoc

 

dartdoc

API reference generation tool.

dart.dev


다트 언어 연습 환경

웹 브라우저에서 다트 문법을 테스트할 수 있다.

https://dartpad.dev

 

DartPad

 

dartpad.dev

하지만 나는 이곳에서 하지 않고 android studio나 intellij 에디터를 사용한다. 가장 큰 이유는 vim plugin을 사용할 수 있기 때문이다. vim이 없다면 너무 힘들다.....그래서 vim을 사용할 수 있는 에디터를 애용하고 있다.
android studio나 intellij 에디터를 사용한다면 dart 파일이 새로이 생성하여 이곳에서 테스트 및 연습을 하면 된다.


타입 추론

다트는 C#과 마찬가지로 타입을 직접 명시하지 않고 var로 대체할 수 있는 타입 추론을 지원한다. 

var i = 10;
var d = 5.5;
var s = 'hello';
var b = true;
...

상수 final, const

C# 언어에서의 readonly가 final이다. const는 똑같이 const이다. readonly, const 키워드와 개념도 똑같다.

변수는 값이 변경되어 의도치 않게 에러를 발생할 가능성이 있으므로 가급적이면 값이 변하지 않게 상수로 사용하는 것이 좋다. 선언할 때 final 키워드를 제일 앞에 붙이면 값이 수정되지 않는 상수로 사용할 수 있다.

  • const : 컴파일 타임(CompileTime)에 메모리에 올리고 상수화 시킨다.
  • final : 실행 타임(RunTime)에 상수화 시킨다 (생성자를 통하여 상수화).
final String name = '김연아';
name = 'yuna'; // 에러

타입을 생략하고 다음과 같이 짧게 작성할 수 있다.

final name = '김연아';

산술 연산자

다트에서는 다음과 같은 산술 연산자를 제공한다.

  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기 (double 타입 반환)
  • ~/ : 몫 (int 타입 반환)
  • % : 나머지 (int 타입 반환)

assert() 함수는 계산 결과가 참인지 검사한다.

assert(2 + 3 == 5);
assert(5 / 2 == 2.5);
assert(5 ~/ 2 == 2);
assert(5 % 2 == 1);

참고로 darpad.dev 같은 웹에서는 assert() 함수가 동작하지 않는다.


형 변환 (as 키워드)

형변환(type casting)에는 as 키워드를 사용한다. 다른 타입끼리는 변환이 안 되고 더 상위 개념으로 변환할 수 있다.

int와 double은 모두 num을 구현하는 타입이지만 서로는 관계가 없기 때문에 형변환이 불가능하다.

double c = 30.05;
int d = c as int; // 에러

하지만 int와 double 모두 상위 개념인 num으로 형 변환할 수 있다.

dynamic d = 30.5;
num n = d; // as num; 생략 가능

익명 함수

이름 없는 익명 함수(anonymous function) (무명 함수)도 정의해 사용할 수 있다.

([인수명] { [동작 또는 반환값] }

다음 익명 함수는 number가 짝수면 true를, 홀수면 false를 반환한다.

(number) {
    return number % 2 == 0;
}

람다식

다트에서는 람다(lambda) 표현식이라는 함수 표현 방식을 지원한다. => 왼쪽에는 인수명을 작성하고, 오른쪽에는 동작할 코드 또는 반환값을 작성한다.

([인수명]) => [동작 또는 반환값]

위의 무명 함수와 같은 동작을하는 람다식은 아래와 같다.

(number) => number % 2 == 0;

선택 매개변수

함수 정의에서 {}로 감싼 매개변수는 선택적으로 사용할 수 있다. 호출할 때 매개변수명을 값 앞에 써주면 된다. 그래서 이런 매개변수를 '이름 있는 매개변수(Named Praramter)'라고도 부른다.

void something({String name, int age}) { }

void main(){
    something(name: '김연아', age: 31);
    something(name: '김연아');
    something(age: 31);
    something();
}

만약 필수 매개변수와 선택 매개변수를 함께 사용하고 싶다면 앞쪽에 필수 매개변수를 먼저 두도록하자.

void something(String name, {int age}) { }

void main(){
    something(name: '김연아', age: 31); // ok
    something(name: '김연아');  // ok
    something(age: 31); // 에러
    something(); // 에러
}

선택 매개변수는 기본값을 지정할 수 있다.

void something(String name, {int age = 20}) { }

void main() {
    something('김연아', age: 31); // 김연아, 31살
    something('김연아'); // 김연아, 20살
}
Comments