비동기란?
동기는 모든 코드가 순차적으로 진행되는 형태를 말한다. (원래 우리가 짠 코드가 진행되는 방식)
비동기는 반대로 코드가 동시다발적으로 실행되는 형태를 말한다.
비동기 프로그래밍 방식
비동기 프로그래밍 방식이 두 가지가 존재한다.
또한 이 두 가지는 용도가 정확하게 나누어져 있다.
Future - async - await
응답을 한번만 돌려 받을 때 사용된다.
예를 들어, 서버에서 데이터를 한번 불러올 때 사용
Stream - async* - yield
지속적으로 응답을 돌려 받아야할 때 사용된다.
예를 들어 - 1초마다 어떤 데이터를 바꿔야할 때 사용
비동기 프로그래밍 예시 코드 및 결과
Future - async - await 예시 코드
void main() {
Future<void> waiting(int second) async {
await Future.delayed(Duration(seconds:second));
print("$second 초 만큼 기다렸습니다.");
}
waiting(3);
waiting(1);
waiting(2);
}
과연 결과는 어떻게 나올까?
분명 3초, 1초, 2초 순으로 메서드를 호출했는데, 1초, 2초, 3초 순으로 출력이 된다.
그 이유는 동시에 실행되기 때문에 가장 빨리 끝나는 1초부터 출력하게 된다.
Stream - async* - yield 예시 코드
void main() {
Stream<int> repeatedlyData() async*{
int counter = 0;
while(counter <= 5){
counter++;
await Future.delayed(Duration(seconds: 1));
print("실행중 $counter 초");
yield counter;
}
print("실행 완료");
}
repeatedlyData().listen((e){});
}
실행 결과는 아래와 같다.
Stream을 사용하는 방법은 이 글에서 자세히 다룰 수 없어 위와 같은 간단한 예시로 설명했다.
기회가 된다면 추가적인 게시글을 올려야겠다.
오늘은 여기서 끝!
이 두 가지는 플러터를 이용해 개발을 하면 언젠가 만나게 되는 친구들이다.
한번씩 이해하고 넘어 가는 것이 좋다.