동기호출
요청에 대한 결과가 동시에 일어난다.
비동기호출
요청에 대한 결과가 동시에 일어나지 않고 요청을 한번데 다받고 이벤트가 준비 되었을 때 응답을 나중에 이루어짐
비동기 작업의 사용성 문제
비동기 작업은 여러 작업을 동시에 수행할 수 있는 장점이 있지만, 의존성이 길게 이어져 있는 비동기 작업들을 처리할 때 곤혹에 치를 수 있습니다. 왜냐하면 비동기 작업이 시작되는 시점은 함수 호출이며, 또한 이 함수 호출 시점에 다음 작업(콜백 함수)도 넘겨줘야 하기 때문입니다. 이런 행태를 이른바 콜백 지옥이라고 합니다. 콜백 지옥에 관련해서는 크게 다루지 않도록 하겠습니다.
종종 콜백 지옥에 의해서 Promise 가 등장했다고 설명하시는 분들도 있는데, 제 견해는 좀 다릅니다. callback 방식보다 Promise 방식이 비동기 작업에 대해 훨씬 쉽고 직관적으로 코딩할 수 있다고 생각합니다. 뭐 사실 그게 그거일 수도 있네요.
예를 들면
전화는 하던일을 멈추고 받아야함 (bloking)
요청에 대한 결과를 동시에 반응 한다. (synchronous)
동기를 뜻한다.
반면, 문자는 확인후 나중에 답장을 해도된다. 비동기이다.
동기 호출
순차적으로 함수를 실행합니다.
비동기 호출
setTimeout 함수를 이용하여 callback 함수는 나중에 실행한다.
비동기 함수 전달 패턴
1. callback 패턴let request = 'caffelatte'; orderCoffeeAsync(request, function(response) { //-> 주문한 커피 결과 drink(response); }
2. 이벤트 등록 패턴
let request = 'caffelatte'; orderCoffeeAsync(request).onready = function (response) { //response ->주문한 커피 결과 drink (response); }