Dart Async, Json

이영준·2023년 5월 10일
0

📌 Async 처리

다트는 Future, async, await을 이용하여 비동기 작업을 처리함

당장끝나지 않을 작업에 대해 async 처리. 비동기 작업이 끝난 결과를 받기 위해 Future 클래스 사용한다.

async로 선언한 함수는 비동기적으로 실행되어 오래걸리는 작업의 경우 함수 밖의 뒷부분이 먼저 실행될 것이다.

async로 선언한 함수 내의 await 처리를 하면, 그 함수 안에서는 await 로 선언한 부분이 완료가 된 다음에 뒷 부분이 실행된다.

void main() {
  print('start main');
  var future = checkData();
  print('end main');
  print(future);
}

Future checkData() async {
  var data = await getAllData();
  print(data);
}

int getAllData() {
  // Future.delayed(const Duration(seconds: 3));
  return 1000;
}

start main
end main
Instance of 'Future<dynamic>
1000

🔑 Then, 비동기 반환값 받기

Future로 선언한 비동기 함수의 반환값을 받기 위해서는 then을 사용한다

void main() async{
  print('start main');
  await checkData().then((value) => {print(value)});
  print('end main');
}

Future checkData() async {
  sleep(Duration(seconds: 3));
  var data = await getAllData();
  return data;
}

String getAllData(){
  return 'Hello Dart';
}

start main
//3초후
Hello Dart
end main

📌 쓰레드

  • 다트는 기본적으로 하나의 스레드로 실행되며, 여러 스레드를 만들 수 없다.
  • 때문에 Isolate을 만들어 병렬 처리를 한다.
  • Isolate는 분리된 작업의 단위이며, 스레드 안에서 여러개 생성이 가능하다.
  • 가장 기본이 되는 Isolate는 main Isolate 이며, 프로그램 실행 시 만들어진다.
  void main(){
    Isolate.spawn(sendMessage, '1. Kotlin');
    Isolate.spawn(sendMessage, '2. Android');
    Isolate.spawn(sendMessage, '3. Hybrid');

    // !! dalay 시켜서 main thread 내의 spawn 모두 실행시키기.
    Future.delayed(const Duration(seconds: 2), () =>
      print('Future method called...')
    );
  }

  void sendMessage(var message) {
    print('This is a ${message}');
  }

This is a 1. Kotlin
This is a 3. Hybrid
This is a 2. Android
Future method called...

📌 JSON 데이터 처리

🔑 json str -> JSON object

//Json Decoding
  void main(){
    var jsonString = '''
    [
      {"name":"홍길동"},
      {"name":"손홍민"}
    ]
    ''';

    var info = jsonDecode(jsonString);
    print(info);
    //List 인지 체크
    print(info is List);
    //첫번째 Key:Value
    print(info[0]);
    print(info[0]['name']);
  }

🔑 JSON object -> json str

  void main(){
    //'' -> 변수임을 나타냄
    var infoList = [{'menu':"삼겹살"},
      {'name':"탕수육"},
      {'menu':"보쌈"},
      {'menu':"짬뽕",'price':10000}
      ];
    // !! infoList를 출력해서 둘간의 차이를 보자. ""로 감싼것이 차이
    print(infoList);
    var infoText = jsonEncode(infoList);
    print(infoText);

  }
profile
컴퓨터와 교육 그사이 어딘가

0개의 댓글