Flutter Asynchronous 예제로 개념 익히기
in Flutter
Asynchronous(비동기)는 결과가 바로 오지 않더라도 프로그램이 기다리지 않고 다음 동작을 이어서 바로 진행합니다.
그러면 반대로, Synchronous(동기)의 경우에는 결과물이 도착할 때까지 기다렸다가 받고 나서 이후에 동작을 진행을 합니다.
아래의 예제를 보면서 설명을 드리겠습니다.
4가지의 예시를 보여드릴겁니다.
1. 동기 방식 (일반적인 진행 방식)
순서대로 진행을 하기때문에 옆에 출력도 순서대로 이루어지는 것을 볼 수 있습니다.
2. 동기 방식 (일반적인 진행 방식)
여기서는 메서드를 잘 따라가다보면 “내 이름은 우파루파”가 찍혀야 할 거 같은데 Future 객체가 찍히는 모습을 확인 해 볼 수 있습니다.
이렇게 나오는 이유는 delayed가 걸리기 때문에 바로 처리를 할 수 없어서 우선 Future 객체를 넘겨버리고 다음것을 진행한다는 것을 알 수 있습니다.
저기서 name의 객체 유형은 Future이겠죠.
3. 비동기 방식 (async , await)
async와 await를 사용하는 방법입니다.
출력 순서를 확인 해보면 2,3번째 것들이 먼저 찍히고 이후에 도착한 1번을 맨 마지막에 출력하는 것을 확인 할 수 있습니다.
잘못 사용 한 경우
제가 처음에 이렇게 찍고 왜 안되지 삽질을 했었는데 async를 걸고있는 부분에서 await를 기다리기 때문에 동기처럼 모두 기다렸다가 출력을 하게 됩니다.
4. 비동기 방식 (then)
3번과 같이 우선 진행합니다.
그래서 출력 순서를 확인 해보면 2,3번째 것들이 먼저 찍히고 이후에 도착한 1번을 맨 마지막에 출력하는 것을 확인 할 수 있습니다.
결론
어떤 방식이 효율적이다라는 것은 상황마다 다르기 때문에 적절한 상황에 쓰는 것이 가장 중요합니다. 반드시 데이터를 받고 나서 이후에 동작이 되어야 하는 것들이 있을 수 있고, 그냥 넘어가고 도착할 때마다 사용을 하면 될 때도 있으니 잘 알아둬야 적재적소에 사용 할 수 있겠죠?
비동기의 경우는 많은 데이터, 이미지등 큰 데이터를 로딩시킬때 사용을 많이 하는 것으로 알고 있습니다. 최근 트렌드는 페이지를 전체 리로딩 하기 보다는 바뀌는 데이터만 새로 랜더링하기 때문에 이러한 비동식 방식을 잘 적용 시킨다면 퍼포먼스에서 많은 이득을 얻을 수 있을 것 입니다.
찾아보니 4번의 방식보다 3번의 방식이 많이 선호되고 있는데, Future에 체이닝이 많이지게 되면 지저분하기도 하고, 3번의 경우에는 동기처럼 코딩을 진행할 수도 있습니다.