본문 바로가기
Flutter/Dart

dart 비동기 프로그래밍 -1

by 남행비 2023. 9. 19.

학습 목표

1.dart 비동기 프로그래밍에 대한 개념을 이해하자.

 

 

동기성 - 모든 코드가 순차적으로 진행되는 형태

비동기- 코드가 동시다발적으로 실행, 순차적으로 보장을 할 수 없는 형태

 

dart 비동기 프로그래밍은 프로그램의 흐름을 중단시키지 않고, 무언가의 완료를 기다리는 동안 다른 작업을 수행할 수 있게 해줍니다. Dart에서는 이를 위해 Future와 Stream이라는 두 가지 주요 개념을 제공합니다.

// 키워드 묶음

// async / await / Future : 1회만 응답을 돌려 받는 경우

// async* / yield / Stream : 지속적으로 응답을 돌려 받아야 하는 경우

 

시나리오 코드1 - Future 타입 사용해보기

1 단계

출력 결과

2 단계

출력 결과

3 단계

task 1... 출력 후 2초 뒤 출력 됨

규칙 : await 키워드를 사용하는, 포함하고 있는 함수는 반드시 함수 선언부에 async 키워드를 선언해주어야 한다.

 

await 키워드 사용시 async 키워드를 붙여야 하는 이유

 

가독성: async 키워드를 붙이는 것은 해당 함수 내에서 await 키워드를 사용할 수 있음을 명시적으로 나타냅니다. 이는 함수의 정의를 보는 즉시 해당 함수가 비동기 로직을 포함하고 있음을 알려줍니다.

 

반환 유형: async 함수는 항상 Future를 반환합니다. 만약 값을 반환한다면, 그 값은 Future<T>로 자동 감싸집니다. 이는 호출자에게 이 함수가 비동기적으로 실행될 수 있음을 알려주며, 그 결과를 적절하게 처리해야 함을 의미합니다.

 

오류 처리: async 함수 내에서 발생한 예외는 자동으로 Future에 캡쳐됩니다. 이렇게 하면 호출자는 catchError 메소드를 사용하여 비동기 오류를 쉽게 처리할 수 있습니다.

 

이해도를 높이기 위한 코드 작성

  방법 1 - (await, async 사용)

출력 결과

방법 2 - (Future.then() 콜백 메서드 활용) 

------------ 먼저 나온 후 출력 됨

Key Point Future 타입을 소화 시키는 방법

1. 동기적 프로그래밍으로 만들어 준다.

2. 콜백 메서드로 활용 한다.

3. 하나의 비동기 작업을 처리하기 위해 두 가지 방법을 혼합하여 사용할 수도 있다.

동기적 프로그래밍으로 만들어 준다: 실제로 Future 값을 다룰 때는 async와 await 키워드를 사용하여 코드를 마치 동기적으로 실행되는 것처럼 작성할 수 있습니다. 이 방식은 코드의 가독성을 향상시키며, 비동기 로직을 순차적으로 이해하기 쉽게 해줍니다.

 

콜백 메서드로 활용한다: Future.then(), Future.catchError(), 그리고 Future.finally()와 같은 메서드를 사용하여 Future의 결과나 오류를 처리할 수 있습니다. 이 방식은 전통적인 콜백 스타일로 비동기 작업을 처리하는 방법입니다.

 

하지만, 이 두 방법은 서로 배타적인 것은 아닙니다. 즉, 하나의 비동기 작업을 처리하기 위해 두 가지 방법을 혼합하여 사용할 수도 있습니다.

 

시나리오 코드 - Future 타입에 함수 활용

출력 결과

 

'Flutter > Dart' 카테고리의 다른 글

dart 비동기 프로그래밍 -3  (0) 2023.09.20
dart 비동기 프로그래밍 -2  (0) 2023.09.19
dart null Safety  (0) 2023.09.19
dart 제네릭  (0) 2023.09.19
dart Mixin(믹스인) 클래스  (1) 2023.09.19