다트의 async/await 구문은 어떻게 작동하나요?
_____A1: async/await는 다트에서 비동기 작업을 간단하고 직관적으로 처리할 수 있도록 도와주는 문법입니다. async 함수는 Future를 반환하며, await는 Future의 완료를 기다려 비동기 작업이 끝날 때까지 코드 실행을 잠시 멈추는 역할을 합니다.
Q2: async 함수는 어떻게 선언하나요?
A2: 함수 선언부 뒤에 `async` 키워드를 추가하면 됩니다. 예를 들어:
```dart
Future
// 비동기 작업
}
```
Q3: await 키워드는 어떻게 사용하나요?
A3: Future를 반환하는 비동기 작업 앞에 `await`를 붙여 호출합니다. 이렇게 하면 해당 작업이 완료될 때까지 다음 코드 실행을 지연시키고, 완료 후 값을 반환받을 수 있습니다. 예:
```dart
var data = await fetchNetworkData();
```
Q4: async/await를 사용할 때 함수의 반환 타입은 어떻게 되나요?
A4: 일반적으로 async 함수는 `Future` 또는 `Future
Q5: async/await와 Future의 차이점은 무엇인가요?
A5: Future는 비동기 작업의 결과를 나타내는 객체이며, async/await는 Future 기반 비동기 코드를 더 직관적으로 작성할 수 있는 문법입니다. 즉, async/await는 Future를 쉽게 다루기 위한 도구입니다.
Q6: async 함수 내부에서 에러 처리는 어떻게 하나요?
A6: async 함수 내에서도 try-catch 블록을 사용하여 에러를 처리할 수 있습니다. 예:
```dart
try {
var data = await fetchData();
} catch (e) {
}
```
Q7: async/await 사용 시 주의할 점이 있나요?
A7:
- await는 반드시 async 함수 내에서만 사용할 수 있습니다.
- await는 비동기 작업이 완료될 때까지 해당 함수 실행을 멈추지만, 이벤트 루프는 다른 작업을 계속 처리합니다.
- 여러 개의 비동기 작업을 병렬로 실행하고 싶다면 여러 Future를 동시에 생성한 후 `Future.wait`를 사용하는 것이 효율적입니다.
Q8: async/await가 블로킹 코드를 만드는 건가요?
A8: 아니요. await는 현재 async 함수 내의 실행을 중단시키지만, 그 사이 이벤트 루프는 계속 다른 작업들을 처리합니다. 즉, 프로그램 전체를 블로킹하지 않고 비동기적으로 동작합니다.
Q9: async 키워드 없이 await를 사용할 수 있나요?
A9: 아닙니다. await는 반드시 async 함수 내부에서만 사용 가능합니다. 만약 async가 붙지 않은 함수에서 await를 사용하려고 하면 컴파일 오류가 발생합니다.
Q10: 간단한 async/await 코드 예시를 보여주세요.
A10:
```dart
Future
return Future.delayed(Duration(seconds: 2), () => '커피');
}
void main() async {
print('주문을 요청합니다.');
var order = await fetchUserOrder();
print('주문 완료: $order');
}
```
이 코드는 2초간 지연 후 '커피'라는 주문을 받아 출력합니다. async/await 덕분에 비동기 작업이지만 마치 동기처럼 코드를 읽기 쉽게 작성할 수 있습니다.
작성자:
박예진 [비회원]
| 작성일자: 1년 전
2024-09-19 01:52:37
조회수: 137 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 137 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.