동기와 비동기는 요청을 보낸 후 어떻게 다음 방식을 동작시키는지에 대한 이야기이다.
왼쪽은 동기 /// 오른쪽은 비동기식 방식이다.
요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식이다.
어떠한 일을 처리할 동안 다른 프로그램은 정지한다.
여러개의 일을 진행해야 할경우 ( A, B, C, D, E )
→ A시작 → A끝 → B시작 → B끝 .... E끝
이런식으로 시간이 오래걸린다.
실제 cpu가 느려지는 것은 아니지만 시스템의 전체적인 효율이 저하된다고 할 수 있다.
요청을 보낸 후 응답(=결과)와는 상관없이 다음방식이 동작하는 방식이다.
결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.
비동기식은 비동기식 처리를 요청할 때 할일 이 끝난 후 처리결과를 알려주는 콜백이라는 함수를 함께 알려준다.
비동기식 처리를 요청하였을 때 호출받은 함수는 바로 응답(=확인)을 수행한다.
이 응답은 처리 결과에 대한 응답이 아니라 요청에 대한 확인 동작일 뿐이다.
호출받은 함수는 처리가 끝나면 요청한 함수를 호출하여 처리 결과를 전달하게 된다.
이러한 함수 호출의 흐름은 사용자가 아닌 일을 마친 시스템이 호출하는 형태이기 때문에 콜백이라고 불린다.
이미 응답을 했기 때문에 처리결과를 함수 호출이라는 형태로 전달하는 것이다.
비동기 처리를 사용하는 이유는 다음과 같다.
서버와 통신할 때 주로 사용하게 된다. 메인 쓰레드는 화면을 구성해준다.
그리고 백그라운드 쓰레드가 주로 서버와 통신을 진행하게 된다.
만약 이때 동기적으로 구성하게 된다면 여러가지 데이터를 받아올 때까지 앱은 계속해서 화면의 구성 혹은 실행을 기다릴 것이고, 사용자는 불편함을 느끼게 될것이다.
이를 위해서 비동기 처리로 진행한다.