<Flutter> 비동기 처리
- Developer/Flutter
- 2023. 7. 9.
비동기(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 키워드를 사용하여 비동기 처리를 효율적으로 구현할 수 있습니다.
'Developer > Flutter' 카테고리의 다른 글
<Flutter> Hex를 Color에 적용하기 (0) | 2023.07.16 |
---|---|
<Flutter> Repository에 대해 (0) | 2023.07.11 |
<Flutter> 리스트를 맵으로 바꾸기 (0) | 2023.07.07 |
<Flutter> Flutter에서 async와 await 이해하 (0) | 2023.07.07 |
<Flutter> Future와 Stream (0) | 2023.07.06 |