[Dart] 다트 맛보기

CheolHyeon Park·2021년 3월 22일
0

flutter

목록 보기
3/5

다트 특징


Dart 언어의 큰 특징 6가지

  • main() 함수로 시작한다.
  • 변수는 어디서든지 선언할 수 있다.
  • 모든 변수가 객체(Object)이다. 즉, Object 클래스를 상속받는다.
  • 강타입 언어이지만, dynamic타입을 이용하여 여러 타입을 허용할 수 있다. (typescript의 any 느낌)
  • 제네릭을 허용한다.
  • 언더스코어(_)를 통해 private 타입을 나타낸다.

비동기 처리


함수 앞에 Future를 붙이고 중괄호 앞에async, 해당 함수를 await로 받는다.

void main() {
	checkVersion();
    print('end Process');
}

Future checkVersion() async {
	var version = await lookUpVersion();		// suspend
    print(version);
}

int lookUpVersion () {
	return 12;
}

결과

end process
12

thread

다트는 싱글 스레드 언어이다.
그래서 비동기 구문을 잘 활용해야한다. (suspend)

JSON 데이터 주고 받기


다트에서 JSON을 다루기 위해서는 convert 라이브러리를 포함해야 한다.

import 'dart:convert';

void main() {
  var jsonString = '''
  [
    {"score": 40},
    {"score": 80}
  ]
  ''';
  
  
  
  var scores = jsonDecode(jsonString);
  print(scores is List);
  var firstScore = scores[0];
  print(firstScore is Map);
  print(firstScore['score'] == 40);
}

is 타입을 체크하는 예약어

위와 같이 jsonDecode()를 통해 서버에서 받은 데이터를 처리할 수 있다.

반대로 json형태로 애플레케이션에서 서버로 전송도 가능하다.

import 'dart:convert';

void main() {
  var scores = [
    {'score': 40},
    {'score': 80},
    {'score': 100, 'overtime': true, 'special_guest': null}
  ];
  
  var jsonText =  jsonEncode(scores);
  print(jsonText == '[{"score":40},{"score":80},{"score":100,"overtime":true,"special_guest":null}]');
  }

스트림 통신


서버에서 데이터를 순서대로 처리해야하는 경우가 생긴다. 이 경우 스트림을 이용한다.
스트림은 FIFO구조로 짜여진다.

import 'dart:async';

Future<int> sumStream(Stream<int> stream) async {

  var sum = 0;
  await for (var value in stream) {
    print('sumStream : $value');
    sum += value;
  }
  return sum;
}

Stream<int> countStream(int to) async* {
  for(int i = 1; i <= to; i++) {
    print('countStream : $i');
    yield i;
  }
}

void main() async {
  var stream = countStream(10);
  var sum = await sumStream(stream);
  print(sum);
}

yield는 yield는 지속적으로 데이터를 내보내는 예약어 (유지되는 return)

연습예제



void main() {
  Car bmw = Car(320, 100000, 'BMW');
  Car benz = Car(250, 70000, 'BENZ');
  Car ford = Car(320, 80000, 'FORD');
  
  bmw.selectCar();
  bmw.selectCar();
  bmw.selectCar();
  print(bmw.price);
}

class Car {
  
  String name = '';
  int maxSpeed= 0;
  num price = 0;
  
  Car(int maxSpeed, num price, String name) {
    this.name = name;
    this.price = price;
    this.maxSpeed = maxSpeed;
  }
  
  int selectCar() {
    price = price * 0.9;
    return price;
  }
}

출처: 플러터 앱 프로그래밍 - 조준수 지음

profile
나무아래에 앉아, 코딩하는 개발자가 되고 싶은 박철현 블로그입니다.

0개의 댓글