티스토리 뷰

무스마

세 번째 과제

하몬드 2023. 8. 13. 21:11

비동기 처리란?

 

 

일반적인 프로그래밍은 단일 스레드 환경에서 순차적(동기적)으로 수행이 이루어진다.

애플리케이션에서 파일 읽기, 데이터베이스 접근, 웹 페이지 가져오기 등의

상대적으로 긴 시간이 필요한 작업들을 처리할 때 비동기 처리를 쓰게 된다.

 

(애플리케이션의 렌더링 시간을 줄이기 위해 하는 처리라고 볼 수 있다.)

 

 

Future란?

 

Future는 비동기 작업의 결과를 나타내는 객체로,

비동기 작업이 완료되면 해당 결과가 Future 객체에 저장된다.

 

Future는 "Future<타입명>" 이런식으로 타입을 명시해야 한다.

 

 

 

Future는 2가지 상태를 가지며, (미완료/완료)

2가지의 결괏값을 얻을 수 있다. (data/error)

 

 

 

예제 코드

 

then, catchError로 반환값이 data일 때와, error일 때 수행할 코드를 작성해 준다.

 

import 'dart:async';

// 3초 후 100을 반환하는 함수
Future<int> futureNumber() {
  return Future<int>.delayed(Duration(seconds: 3), () {
    return 100;
  });
}

void main() {
  // future 라는 변수에서 미래에(3초 후에) int가 나올 것이다.
  Future<int> future = futureNumber();
  
  // Future의 반환값에 따른 결과 출력
  future.then((val) {
    print('val: $val');
  }).catchError((error) {
    print('error: $error');
  });

  print('main 종료');
}

 

 

"main 종료 출력" 후 3초 후 "val: 100"을 출력한다.

 

기존의 동기적 실행이라면, "val: 100" 출력 후 "main 종료" 문이 프린트 되겠지만,

future 타입의 futureNumber()를 실행했기 때문에

3초가 지날 때까지 다른 작업("main 종료" 출력)을 먼저 진행한 것이다.

 

 

Await / Async

 

비동기 처리라도 때로는 기다렸다가 동기적으로 처리할 필요가 있는 경우,

외부 요청에 의해 받아온 반환값이 있어야 후 작업들을 진행할 수 있는 경우라면,

비동기 요청을 동기적으로 수행시켜주어야 한다.

 

그럴 경우에 async / await 키워드를 사용합니다

await는 해당 작업이 완료될 때까지 함수의 실행을 일시 중단시킵니다.

awaitasync(비동기)를 명시해준 메소드안에서 사용이 가능하다.

 

예제 코드

 

Future<void> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // 비동기 작업 시뮬레이션
  print('데이터 가져옴');
}

void main() async {
  print('작업 시작');
  await fetchData(); // fetchData() 함수의 비동기 작업 완료 대기
  print('작업 완료');
}

 

 

await를 사용하여 비동기 작업이 완료될 때까지 main 함수의 실행을 일시 중단시킨다.

이로 인해 "작업 시작"이 먼저 출력되고 "작업 완료""데이터 가져옴" 이후에 출력된다.

 

 

이런식으로 프로그래밍을 하면 최종 출력값을 받기까지 오랜시간이 걸리므로,

결과적으로는 멈춰있는 시간이 길어지게 된다.

 

 

'무스마' 카테고리의 다른 글

다섯번째 과제 (4번째 과제 보충)  (0) 2023.09.05
네 번째 과제  (0) 2023.08.21
두 번째 과제  (0) 2023.08.07
첫 번째 과제  (0) 2023.07.31
개발 블로그 시작  (0) 2023.07.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함