Dart 기본 문법 정리 1편

void, class 및 각종 표현법

Posted by Minki on May 12, 2020

잘못된 내용은 언제든지 밑의 댓글로 알려주세요!

Dart language

Dart는 구글이 개발한 웹 프로그래밍 언어로, 자바스크립트나 리액트처럼 많이 대중화된 프로그래밍 언어는 아닙니다. 그러나 제가 Dart를 배우는 이유는 Cross-Platform FrameWork인 flutter를 사용하기 위함입니다. 그래서 이번 포스팅에서는 flutter를 위한 dart의 기본 문법을 정리해보겠습니다.

Dart 기본 문법

1. void main()

Dart를 실행시키면 가장 먼저 볼 수 있는 코드입니다. dart는 코드를 볼때 main 함수를 가장 먼저 실행시킨다. 그렇기에 classmain함수 밖에 만든 후, 이를 main에 넣어 줘야 실행이 됩니다. 코드를 짜는 형식이 이렇기 때문에 아마 ‘플러터는 모든 것이 Widget이다.’라고 하는 것 같습니다. 그럼 이제 코드를 구체적으로 살펴보겠습니다.

2. 변수 설정

1
2
3
4
5
6
int age = 30;
double height = 180.3;
num weight = 75.5; // num은 int와 double을 모두 커버할 수 있습니다.
height = age as double; // double과 int는 서로 할당이 불가능합니다. as를 통해 할당할 수 있습니다.
String name = 'minki';
bool isNight = false;

기본적으로 dart에서는 한번 선언된 변수 타입은 바꿀 수 없습니다. 만약 변수 타입을 지정하고 싶지 않다면 다음을 이용하여 변수를 설정하면 됩니다.

1
2
3
dynamic a = 10;
final b = 10; // final로 선언하면 변수 타입을 지정해주지 않아도 되지만 할당된 값을 바꾸지 못합니다.
const c = 'Happy'

constfinal은 할당된 변수값을 바꿀 수 없다는 공통점이 있습니다. 그러나 constcompile-time constants로 런타임동안이 아니여도 컴퓨터가 이 상수에 할당된 값을 파악하고 있습니다. 그렇기에 const는 메모리를 임의할당하는 변수타입이고, final은 런타임 시에만 할당된 값을 확인하므로 메모리를 동적으로 할당하는 변수타입이라고 쉽게 이해할 수 있습니다.

3. 함수 설정

함수를 설정한 다음에 적절한 변수 지정으로 함수에 할당된 값을 호출할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main() {
  String greet = greeting();
  int age = getAge();

  print(greet); // hello
  print(age); // 50
}

String greeting() {
  return 'hello';
}

int getAge() {
  return 50;
}

4. List 생성

List 생성법은 다른 언어랑 유사한 방식입니다.

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
// 변수 타입 상관 없는 리스트 생성법
List samples = ['a', 2, 3.8];
samples.add('d'); // List에 값 추가
samples.add(30)
samples.remove('d'); // List 값 제거

// 변수 타입 지정 리스트 생성법
List<String> foods = ['우유', '라면', '고기'];

void main() {
  // items1은 처음에 스트링만 넣었기 때문에 String으로 List 타입이 고정됨
  var items1 = ['라면', '우유', '냄비'];
  items1.add('사탕');
  items1.add(1); // 에러 발생
  print(items1); // [라면, 우유, 냄비, 사탕]
  
  // items2는 스트링과 num이 섞여 있기 때문에 타입 고정이 안됨
  var items2 = ['라면', '우유', 2];
  items2.add('너구리');
  items2.add(1);
  items2.add(1.5);
  print(items2); // [라면, 우유, 2, 너구리, 1, 1.5]

  // list에 list를 추가하는 방법
  var items3 = [...items1, ...items2, 5];
  print(items3); // [라면, 우유, 냄비, 사탕, 라면, 우유, 2, 너구리, 1, 1.5, 5]
}

5. Map 생성

map은 json타입과 유사한 형식으로 작성하면 됩니다.

1
2
3
4
5
6
7
8
void main() {
  var itemMap = {
    'key1' : 1,
    'key2' : 2,
    'key3' : 3,
  };
  print(itemMap['key1']); // 1
}

6. 조건문

조건문도 마찬가지로 다른 함수와 매유 유사합니다.

1
2
3
4
5
6
7
8
9
10
void main() {
  // is not = !is
  var coffee = 'americano';

  if(coffee is String) {
    print('문자열입니다.');
  } else {
    print('문자가 아님');
  }
}

조건문은 ?를 사용해 더 쉽게 표현할 수 있습니다. ?를 사용하는 코딩을 통해 flutter앱이 실행될 시 런타임을 죽이지 않을 수 있습니다.

  • ?? : name이 null일 경우만 수행
  • ? : name2가 null이 아닐 경우 수행
1
2
3
4
5
6
7
void main() {
  String name;
  print(name ?? 'Null입니다.'); // Null입니다.
  
  String name2 = 'ICECREAM';
  print(name2?.toLowerCase()); // icecream
}

기본 문법에 대해 살펴보았습니다. 자바스크립트, 리액트와 꽤 많이 유사하다고 느껴져, 아마 이 두 언어에 능숙하신 분들은 금방 하실거라 생각합니다.


reference