dart는 비동기 프로그래밍을 지원하기 위해 동기 및 비동기 처리 방식을 제공합니다.
동기 처리는 작업이 완료될 때까지 기다리는 방식이며, 비동기 처리는 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 방식입니다.
동기 처리의 주요 특징은 다음과 같습니다.
1. 코드가 순차적이고 직관적이기 때문에 이해하기 쉽습니다.
2. 작업의 순서와 상태를 관리하기 쉽습니다.
1. 작업이 완료될 때까지 기다려야 하므로, 작업이 오래 걸리는 경우 전체 프로그램의 실행이 지연될 수 있습니다.
2. 여러 작업을 병렬로 처리하기 어렵습니다.
3. 작업이 블로킹되는 경우 전체 애플리케이션이 블로킹될 수 있습니다.
다음은 비동기 처리의 주요 특징입니다.
1. 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있으므로, 전체적인 응답성과 성능이 향상될 수 있습니다.
2. 여러 작업을 병렬로 처리하여 시간을 절약할 수 있습니다.
1. 코드가 복잡해지고 이해하기 어려울 수 있습니다.
2. 비동기 작업의 순서와 상태를 관리하기 어려울 수 있습니다.
3. 오류 처리와 예외 처리가 복잡해질 수 있습니다.
따라서, 동기 처리는 단순하고 직관적이지만 성능과 응답성 면에서 제약이 있으며, 비동기 처리는 더 나은 성능과 응답성을 제공하지만 코드의 복잡성과 관리의 어려움이 따를 수 있습니다. 선택은 프로그램의 특정 요구사항과 상황에 따라 달라집니다.
Callback(콜백) 함수는 비동기 처리에서 주로 사용되는 개념입니다. 콜백 함수는 특정 작업이 완료되면 호출되는 함수로, 비동기 작업의 결과를 처리하거나 다음 단계의 작업을 수행하는데 사용됩니다.
아래의 예제에서 performAsyncTask
함수는 비동기 작업을 수행하고, 작업이 완료된 후에 결과를 처리하기 위해 콜백 함수를 사용합니다. performAsyncTask
함수에 콜백 함수를 인자로 전달해 비동기 작업이 완료되면 콜백 함수를 호출합니다. main
에서는 콜백 함수를 정의하고 performAsyncTask
함수를 호출합니다. 결과는 콜백 함수 내에서 처리됩니다.
아래 예시는 위의 예제에서 콜백 함수 대신 직접 결과를 반환하는 async와 await를 사용한 코드입니다.
위의 예시에서는 performAsyncTask
함수가 Future<int>
를 반환하도록 변경되었습니다.
async
키워드를 사용해 비동기 함수임을 명시하고, await
키워드를 사용해 비동기 작업이 완료될 때까지 대기합니다. main
에서는 await
를 사용하여 performAsyncTask
함수를 호출하고 작업이 완료된 결과를 변수에 할당해 처리합니다.
두 예시는 동일한 결과를 출력하지만 콜백 함수를 사용하는 첫 번째 예제는 콜백 함수의 정의와 호출이 필요하며, 비동기 작업의 순서를 파악하기 어려울 수 있습니다. 반면에, async-await
를 사용한 두 번째 예제는 코드가 간결하고 비동기 작업의 순서와 상태를 직관적으로 파악할 수 있습니다.
Future는 비동기 작업의 결과를 나타내는 객체입니다. Future는 작업의 완료 여부를 확인하고 결과값을 가져올 수 있는 메서드를 제공합니다.
_
로 표기합니다.