본문 바로가기

카테고리 없음

[Flutter_개발] 비동기 프로그래밍

비동기 프로그래밍이란?

 

작업이 완료될 때까지 기다리지 않고, 결과가 준비되면 그때 처리하는 방식이다.

방식 설명
동기 주문 후 커피 나올 때까지 가만히 기다림
비동기 주문 후 진동벨 받은 후, 자리에서 다른 행동을 하며 기다리다 진동벨이 울리면 커피를 받음

 

flutter를 이용하면 파일 다운로드, 웹 요청, 파일 저장 및 불러오기 작업 등은 시간이 오래 걸린다. 이걸 기다리기만 하면 앱이 멈춘 것처럼 보이기 때문에 다른 작업을 먼저 할 수 있도록 비동기를 사용한다.

 

이 비동기 프로그래밍을 위해서는 Future함수를 이용해야 하는데

Future<String> orderCoffee() {
  // 비동기 작업(Future)을 일정 시간 뒤에 실행하는 Dart의 내장 함수
  return Future.delayed(Duration(seconds: 3), () {
    return "커피도착";
  });
}

이 함수는 3초 후에 문자열을 리턴한다는 의미를 가지고있다.

실행은 즉시 시작되지만, 결과는 3초 후에 제공된다는 것을 의미한다.

 

여기서도 두가지 방법이 있다.

첫째로 async/awiat 를 이용하여 비동기를 동기 코드처럼 보이게 만드는 방법이다.

void main() async {
  print("카페 도착");
  print("커피 주문");
  String coffee = await orderCoffee();
  print(coffee);
  print("책읽기");
}

Future<String> orderCoffee() {
  // 비동기 작업(Future)을 일정 시간 뒤에 실행하는 Dart의 내장 함수
  return Future.delayed(Duration(seconds: 3), () {
    return "커피도착";
  });
}
카페 도착
커피 주문
커피도착
책읽기

실행하게 되면 카페 도착, 커피 주문 결과값이 나오고 3초후에 커피도착, 책읽기가 출력된다.

await를 이용하려면 async를 붙여야한다. await 키워드는 나중에 올 데이터를 기다렸다 작업하겠다는 키워드이다. await를 사용하게 되면 Future라는 진동벨을 받아 기다리겠다는 의미를 가지게 된다. 

 

그 다음은 then을 이용하는 방식이 있다.

void main() async {
  print("카페 도착");
  print("커피 주문");
  Future<String> coffee = orderCoffee();
  coffee.then((value) {
    print(value);
  });
  print("책읽기");
}

Future<String> orderCoffee() {
  // 비동기 작업(Future)을 일정 시간 뒤에 실행하는 Dart의 내장 함수
  return Future.delayed(Duration(seconds: 3), () {
    return "커피도착";
  });
}
카페 도착
커피 주문
책읽기
커피도착

 

then() 은 콜백 방식으로 Future함수에서 입력해 놓은것을 다른걸 실행하면서 나중에 실행한다. 결과 값에 보이는 것 처럼 진동벨을 받아 책읽기를 하다가 3초후에 커피도착 값을 받는다.

 

이렇게 비동기 방식을 사용하면 Future함수를 이용해서 flutter는 다른 작업을 하며 결과를 기다릴 수 있게 되는 것이다.

 

 

오늘 배운 비동기 방식은 나중에 flutter 개발 단계에서 필수적으로 들어가지 않을까라는 생각이 든다.

어떤 구조로 이뤄져 있는지 다시한번 확인하고 나중에 잘 복습해보자.