동기 처리와 비동기 처리

dart는 비동기 프로그래밍을 지원하기 위해 동기 및 비동기 처리 방식을 제공합니다.
동기 처리는 작업이 완료될 때까지 기다리는 방식이며, 비동기 처리는 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 방식입니다.

동기 처리의 주요 특징은 다음과 같습니다.

장점

1. 코드가 순차적이고 직관적이기 때문에 이해하기 쉽습니다.
2. 작업의 순서와 상태를 관리하기 쉽습니다.

단점

1. 작업이 완료될 때까지 기다려야 하므로, 작업이 오래 걸리는 경우 전체 프로그램의 실행이 지연될 수 있습니다.
2. 여러 작업을 병렬로 처리하기 어렵습니다.
3. 작업이 블로킹되는 경우 전체 애플리케이션이 블로킹될 수 있습니다.


다음은 비동기 처리의 주요 특징입니다.

장점

1. 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있으므로, 전체적인 응답성과 성능이 향상될 수 있습니다.
2. 여러 작업을 병렬로 처리하여 시간을 절약할 수 있습니다.

단점

1. 코드가 복잡해지고 이해하기 어려울 수 있습니다.
2. 비동기 작업의 순서와 상태를 관리하기 어려울 수 있습니다.
3. 오류 처리와 예외 처리가 복잡해질 수 있습니다.


따라서, 동기 처리는 단순하고 직관적이지만 성능과 응답성 면에서 제약이 있으며, 비동기 처리는 더 나은 성능과 응답성을 제공하지만 코드의 복잡성과 관리의 어려움이 따를 수 있습니다. 선택은 프로그램의 특정 요구사항과 상황에 따라 달라집니다.


콜백(Callback) 함수란?

Callback(콜백) 함수는 비동기 처리에서 주로 사용되는 개념입니다. 콜백 함수는 특정 작업이 완료되면 호출되는 함수로, 비동기 작업의 결과를 처리하거나 다음 단계의 작업을 수행하는데 사용됩니다.

아래의 예제에서 performAsyncTask 함수는 비동기 작업을 수행하고, 작업이 완료된 후에 결과를 처리하기 위해 콜백 함수를 사용합니다. performAsyncTask 함수에 콜백 함수를 인자로 전달해 비동기 작업이 완료되면 콜백 함수를 호출합니다. main 에서는 콜백 함수를 정의하고 performAsyncTask 함수를 호출합니다. 결과는 콜백 함수 내에서 처리됩니다.

아래 예시는 위의 예제에서 콜백 함수 대신 직접 결과를 반환하는 async와 await를 사용한 코드입니다.

위의 예시에서는 performAsyncTask 함수가 Future<int>를 반환하도록 변경되었습니다.
async 키워드를 사용해 비동기 함수임을 명시하고, await 키워드를 사용해 비동기 작업이 완료될 때까지 대기합니다. main에서는 await를 사용하여 performAsyncTask 함수를 호출하고 작업이 완료된 결과를 변수에 할당해 처리합니다.

두 예시는 동일한 결과를 출력하지만 콜백 함수를 사용하는 첫 번째 예제는 콜백 함수의 정의와 호출이 필요하며, 비동기 작업의 순서를 파악하기 어려울 수 있습니다. 반면에, async-await를 사용한 두 번째 예제는 코드가 간결하고 비동기 작업의 순서와 상태를 직관적으로 파악할 수 있습니다.


Future 함수와 제공하는 메서드

Future는 비동기 작업의 결과를 나타내는 객체입니다. Future는 작업의 완료 여부를 확인하고 결과값을 가져올 수 있는 메서드를 제공합니다.

  • delayed

    Future.delayed 함수는 지정된 시간 후에 완료되는 Future 객체를 생성합니다.
  • async-await

    async와 await 키워드를 사용하여 비동기 코드를 작성할 수 있습니다. async 키워드로 정의된 함수 내에서 await 키워드를 사용하여 비동기 작업이 완료될 때까지 대기할 수 있습니다.
  • then

    Future.then 메서드는 Future 객체의 작업이 완료되면 호출되는 콜백 함수를 등록합니다.
    이를 통해 비동기 작업의 결과에 대한 추가 처리를 수행할 수 있습니다. 관례적으로, then 메서드의 인자로 넘어가는 불필요한 인자값은 보통 _로 표기합니다.
  • catchError

    Future.catchError 함수는 실패한 Future 객체를 생성합니다. 이를 통해 명시적으로 실패 상태를 나타낼 수 있습니다.
  • whenComplete

    Future.whenComplete 메서드는 Future 작업이 완료된 후에 실행되는 콜백 함수를 등록합니다.
    이를 통해 작업 완료 이후에 추가적인 처리를 수행할 수 있습니다.
  • wait

    Future.wait 함수는 여러 개의 Future 객체가 완료될 때까지 기다린 후에 결과를 반환합니다.
    이를 통해 여러 개의 비동기 작업을 병렬로 실행하고 모든 작업이 완료될 때까지 대기할 수 있습니다.
    병렬 처리는 여러 개의 작업을 동시에 실행하는 것을 의미하는데, Future.wait 함수를 사용하면 여러 개의 Future 객체를 병렬로 실행하고 결과를 기다릴 수 있습니다. 이를 통해 시간을 절약하고 효율적인 비동기 처리를 수행할 수 있습니다.
profile
| App Developer | 제가 한 개발을 읽는 사람이 이해하기 쉽게 쓰려고 노력합니다.

0개의 댓글