<Flutter> 비동기 처리

반응형

 

비동기(Asynchronous) 처리는 한 작업이 완료되기 전에 다른 작업이 시작될 수 있게 함으로써 프로그램의 효율성을 높이는 방법입니다. 이와 대조적으로 동기(Synchronous) 처리는 하나의 작업이 완료될 때까지 다른 작업이 시작되지 않습니다.

 

이 글에서는 Flutter 앱 개발에서 비동기 처리를 위한 async, async* 및 yield 키워드를 알아봅니다.

 

async와 Future

async 키워드는 비동기 함수를 선언할 때 사용하며, 이 키워드가 있는 함수는 Future라는 객체를 반환합니다.

Future 객체는 비동기 상태와 결과를 나타내는 방법으로, 이를 통해 비동기 처리가 완료되면 결과를 가져올 수 있습니다.

Future<void> fetchData() async {
  var data = await http.get('https://api.example.com/data');
  print(data);
}

위 코드에서 fetchData 함수가 async 키워드를 사용하여 선언되어 있음을 볼 수 있습니다.

해당 함수에서 http.get을 호출하며 결과값을 data 변수에 저장합니다. await 키워드를 사용하면 Future 객체가 완료될 때까지 기다린 다음 결과를 반환합니다.

 

async*와 Stream

async* 키워드는 generator 함수를 사용하여 비동기 스트림을 생성하고, Stream 객체로 반환합니다.

이를 통해 이벤트 시퀀스를 처리할 수 있으며, 각 이벤트는 기다리지 않고 바로 처리됩니다.

Stream<int> countStream(int n) async* {
  for (int i = 1; i <= n; i++) {
    yield i;
  }
}

위 코드에서는 async* 키워드를 사용하여 countStream 함수를 선언하였고, 이를 통해 이벤트 시퀀스를 생성합니다.

이렇게 생성된 스트림은 Stream 객체로 반환됩니다.

yield와 yield* 키워드

yield 키워드는 generator 함수에서 값을 생성하고, 해당 값을 스트림에 추가하는 방법입니다.

yield를 사용하면 함수의 실행이 일시 중단되고, 스트림에 값이 추가된 다음 다시 실행을 재개합니다.

Stream<String> messageStream() async* {
  yield 'Hello,';
  yield 'World!';
}

yield* 키워드는 다른 스트림의 값을 현재 스트림에 추가할 때 사용됩니다.

Stream<String> combinedStream() async* {
  yield* messageStream();
  yield 'Bye!';
}

 

오늘 간단하게 비동기 처리에 대해서 알아봤습니다.

Flutter 앱 개발에서 async, async* 및 yield 키워드를 사용하여 비동기 처리를 효율적으로 구현할 수 있습니다.

Designed by JB FACTORY