* 다트 언어는 동기/비동기 프로그래밍을 지원 ㅇ 동기 : 요청하고 나서 응답이 올 때까지 더는 코드를 진행하지 못하고 기다렸다가 응답을 받으면 그 때 다음 코드 진행 ㅇ 비동기 : 요청하고 나서 응답을 받지 않았어도 대기하지 않고 다음 코드 진행, 언제든 응답이 오면 그때 응답 처리(CPU의 리소르 낭비 방지)
1. Future ㅇ 미래에 받아올 값 ㅇ 반환값을 딱 한번 받아내는 비동기 프로그래밍에 사용 ㅇ List, Set처럼 제네릭으로 어떤 미래의 값을 받아올지 정할 수 있음 ㅇ 비동기프로그래밍은 서버 요청과 같이 오래 걸리는 작업을 기다린 후 값을 받아와야 하기에 미래값을 표현하는 Future 클래스가 필요 ㅇ Future.delayed() 사용하면 일정 시간 후에 콜백 함수를 실행할 수 있음
Future<String> name; // 미래에 받을 String값
Future<int> number; // 미래에 받을 int값
Future<bool> isOpened; // 미래에 받을 bool값
2. async, await ㅇ 작성된 순서대로 실행되지 않으면 개발자 입장에서 헷갈릴 수 있음 ㅇ 이 때 async, await 키워드 사용하면 비동기 프로그래밍을 유지하면서 코드 가독성도 유지 가능 ㅇ async 키워드는 함수 매개변수 정의와 바디 사이에 입력 ㅇ await 대기하고 싶은 비동기 함수 앞에 입력 ㅇ 비동기 프로그래밍 특징을 그대로 유지하면서 코드가 작성된 순서대로 프로그램 실행
3. 결괏값 반환받기 ㅇ async, await 키워드를 사용한 함수에서 결괏값을 받아낼 수 있음 ㅇ Future클래스를 사용 ㅇ 적용된 함수에 await를 사용해서 결괏값을 받을 수 있음
4. Stream ㅇ 지속적으로 값을 반환 받을 때 사용 ㅇ 한 번 listen하면 Stream에 주입되는 모든 값들을 지속적으로 받아옴 ㅇ 기본 사용법 -> 플러터에서 기본 제공하는 dart:async 패키지를 불러와야함( import 'dart:async'; ) -> StreamController를 listen() 해야 값을 지속적으로 반환받을 수 있음. -> StreamController 에 sink.add()하면 값을 주입함 -> controller.stream
ㅇ 브로드캐스트 스트림 -> Stream은 단 한번만 listen()을 실행할 수 있음 -> 하나의 스트림을 생성하고 여러번 listen() 함수 실행하고 싶을 때 사용 -> controller.stream.asBroadcastStream()
ㅇ 함수로 Stream 반환하기 -> StreamController를 직접 사용하지 않고도 직접 Stream을 반환하는 함수를 작성 가능 -> Future를 반환하는 함수는 async로 함수 선언, return으로 값 반환 -> Stream을 반환하는 함수는 async*로 함수 선언, yield으로 값 반환