Dart - 비동기 프로그래밍

목진성·2024년 11월 4일

Dart Language

목록 보기
7/12

동기 프로그래밍

작업이 완료될 때까지 기다렸다가 결과가 나오면 값을 반환합니다.

void introduce(String name) {
	print('자기소개 시작 !');
	print('안녕 ? 나는 $name ~');
	print('자기소개 완료 !');
}

void main() {
	introduce('강미래');
	introduce('강현재');
}

/*
자기소개 시작 !
안녕 ? 나는 강미래 ~
자기소개 완료 !
자기소개 시작 !
안녕 ? 나는 강현재 ~
자기소개 완료 !
*/

비동기 프로그래밍

작업이 완료될 때까지 기다리지 않고, 미래의 특정 시점에 값을 반환합니다. 보통 시간이 오래 걸리는 작업을 처리할 때 비동기 프로그래밍을 사용합니다.

종류

  1. Future
Future.delayed(Duration(seconds: 2)

를 통해서 특정코드를 2초 씩 딜레이 시킬 수 있어요! 그렇다고 2초간 코드가 멈추는 것은 아니고, 다음 코드가 먼저 작동된 후 2초 뒤에 코드가 동작합니다.

<예시>

void introduce(String name) async {
	print('$name의 자기소개 시작 !');
  
  await Future.delayed(Duration(seconds: 2), () {
    print('안녕 ? 나는 $name ~');
  });
	
	print('$name의 자기소개 끝 !');
}

void main() {
  introduce('강미래');
  introduce('강현재');
}

/*
강미래의 자기소개 시작 !
강현재의 자기소개 시작 !
안녕 ? 나는 강미래 ~
강미래의 자기소개 끝 !
안녕 ? 나는 강현재 ~
강현재의 자기소개 끝 !
*/

하지만 Future는 하나의 작업당 결과값을 1번만 받을 수 있습니다. 그래서 하나의 작업에 결과값이 여러번 나오게 하기위해 Stream이 등장합니다!!

  1. Stream
  • yield: 값을 방출하도록 하는 키워드, return과 같은 개념이라고 생각하시면 됩니다.
  • listen(): yield를 통해 방출되는 값을 받기 위해 사용하는 메서드
    <예시>
Stream<int> emitNumbers(int first) async* {
  for (var i = first; i >= 0; i--) {
    yield i;
    
    await Future.delayed(Duration(seconds: 1));
  }
}

void main() {
  emitNumbers(10).where((number) => number.isOdd).listen((number) {
    print('[홀수 타이머] $number');
  });

  emitNumbers(10).where((number) => number.isEven).listen((number) {
    print('[짝수 타이머] $number');
  });
}

/*
[짝수 타이머] 10
[홀수 타이머] 9
[짝수 타이머] 8
[홀수 타이머] 7
[짝수 타이머] 6
[홀수 타이머] 5
[짝수 타이머] 4
[홀수 타이머] 3
[짝수 타이머] 2
[홀수 타이머] 1
[짝수 타이머] 0
*/
profile
우주를 항해하는 여행자

0개의 댓글