Dart란?
Search

Dart란?

생성일
2022/07/08 00:59
태그

Dart란?

다트는 웹, 모바일, 데스크톱 등 다양한 환경에서 개발할 수 있도록 설계 되었다. 특히 클라이언트 개발에 특화되었다. 주로 플러터 개발을 위해 사용하는 언어이다. 플러터를 알아보기 위해 우선 다트는 공부해본다. 다트는현재 글 작성 시점 기준 2.17.5 버전이 가장 최신 버전이다.
살짝 맛보기를 했을 때는 자바랑 비슷하다고 느꼈다. 코틀린을 많이 써 왔기 때문에 코틀린과 살짝 살짝 비교하며 다른 부분이나 없던 개념에 대해 작성할 예정이다.
현재 글을 작성 중에 세미콜론을 빠뜨린 경우가 있어 다시 확인하고 넣어주고 그랬는데, kotlin에 익숙해 무의식이 세미콜론을 생략해 버리고 있다. 혹시나 또 세미콜론이 빠진 곳이 있을 거라 예상한다.

변수

변수를 선언하는 방법은 코틀린과 비슷할 뻔(?) 했다.
var name = '이름';
Dart
var 같은 경우는 자동으로 타입추론을 한다. 특이한 점은 문자열을 홀따옴표 안에 작성해줘야 한다. 자바와 같이 세미콜론도 사용하는걸 볼 수 있다.

타입

int number = 0; double number2 = 0.0; String text = ''; bool isBoolean = true; dynamic description = '';
Dart
java나 kotlin에서는 생소한 타입이 하나 등장한다. dynamic이 뭐지? dynamic도 역시 알아서 타입추론을 하지만, var과 다른 점이 있다면 초기에 선언한 타입과 전혀 다른 타입으로 바꿀 수 있다.
예를 들면 이렇다.
dynamic name = 'jAsOn'; name = 12345
Dart

Nullable 타입

String? name = null; print(name!) // kotlin과 마찬가지로 느낌표(!)는 널이 아님을 뜻하는 키워드이다. name ??= 'jAsOn'; // kotlin에서 ?: 연산자와 비슷한 역할이다. 널일 경우 우측의 값으로 변경한다.
Dart

final과 const

final String name = 'jAsOn'; const String name2 = 'jAsOn2'; // 위 코드를 아래 처럼 간소화할 수 있다. final name = 'jAsOn'; const name2 = 'jAsOn2';
Dart
java에서의 final과 const와 동일하다.

List

List<String> blackPink = ['제니', '지수', '로제', '리사']; print(blackPink[0]); // 제니 blackPink.add('jAsOn(?)'); print(blackPink.length); // 5
Dart

Map

Map<String, String> mobile = { 'iOS' : 'Swift', 'Android' : 'Kotlin', 'Flutter' : 'Dart' }; mobile.addAll( { 'React Native' : 'JavaScript' } ) print(mobile['Flutter']); // Dart
Dart

Set

Set<String> names = { 'Swift', 'Kotlin', 'Dart', }; names.add('java'); naems.remove('java');
Dart

조건문

조건문의 경우.. kotlin에서 when으로 사용하던 것이 dart에 오니 다시 java의 switch-case로 돌아 갔다…
switch(number %3 ) { case 0: print('case 0'); break; case 1: print('case 1'); break; default: print('case default'); break;
Dart

열거형

enum Status { approved, pending, rejected, }
Dart

함수

void add() { } add2() { // void 의 경우 생략 가능하다. } int add3() { return 3 } int add4() => 4;
Dart
add4()를 보면 ‘⇒’ 라는 키워드를 볼 수 있는데, kotlin에서 함수를 중괄호+return 대신 ‘=’로 줄여 사용하는 것과 같다.
void main() { addNumbers(10, 20, 30); } addNumbers(int x, int y, int z) { int sum = x + y + z; if (sum % 2 == 0) { print('짝수'); } else { print('홀수'); } }
Dart

optional parameter

addNumbers(int x, [int y = 20, int z = 30]) { int sum = x + y + z; if (sum % 2 == 0) { print('짝수'); } else { print('홀수'); } }
Dart
[ ] 대괄호로 묶어주면 optional parameter를 사용할 수 있다. 초기 값을 지정해주거나 nullable 타입으로 만들어 주면 된다.

named parameter

void main() { addNumbers(x:10, y:20, z:30); } addNumbers( { required int x, required int y, required int z } ) { int sum = x + y + z; if (sum % 2 == 0) { print('짝수'); } else { print('홀수'); } }
Dart
파라미터에 { } 중괄호를 하나 더 넣어주고 required를 붙여주면 된다.
required 키워드를 제거하면 optional parameter로 사용할 수 있다. 키워드를 제거하고 기본 값을 주면 된다.

typedef (1)

typedef Operation = int Function(int x, int y, int z); int add(int x, int y, int z) => x + y + z; int subtract(int x, int y , int z) => x - y - z; void main() { Operation operation = add; int result = operation(10,20,30); print(result); // 60 operation = subtract; int result2 = operation(10, 20, 30); print(result2); // -40 }
Dart
int x, int y , int z라는 파라미터가 모두 동일한 것을 볼 수 있다. 이 것을 dart에서 signature라고 표현하는데, 이 Operation이 가지고 있는 시그니처에 부합하는 함수들을 모두 사용할 수 있다. (add(), subtract())
위와 같은 형태 말고 실제로 많이 사용하는 형태는 아래에서 설명한다.

typedef (2)

typedef Operation = int Function(int x, int y, int z); int add(int x, int y, int z) => x + y + z; int subtract(int x, int y , int z) => x - y - z; int caculate(int x, int y , int z, Operation operation) { return operation(x, y, z); } void main() { int result3 = caculate(10, 20, 30, add); print(result3); // 60 }
Dart