3-0 콜백과 이벤트

블로킹 작업은 현재 작업이 완료되었을 때 다음 작업을 실행한다. 이에 반해 비동기식 프로그래밍에서는 파일 읽기나 네트워크 요청 수행과 같은 일부 작업을 백그라운드 작업으로 실행할 수 있다. 비동기 작업이 호출되면 이전 작업이 아직 완료되지 않은 경우에도 다음 작업이 즉시 실행되기 때문에, 비동기 작업이 끝났을 때 이를 통지받아 해당 작업의 결과를 사용해서 다음 작업을 이어나가야 한다.

Node.js에서 이전 비동기 작업의 완료를 통지받는 기본적인 매커니즘은 콜백이다. 콜백은 비동기 작업의 결과를 가지고 런타임에 호출되는 함수를 의미한다.

Promise나 Async/await 모두 그 기본적인 작동 원리는 콜백이므로, 콜백이 어떻게 작동하는지 그 원리를 파악하는 것이 중요하다.

또한 다양한 다중 이벤트를 다루기 위하여 콜백을 사용하는 관찰자 패턴을 공부하면서, Node.js에서 콜백을 사용하는 가장 광범위한 패턴을 배워보도록 한다.

3-1 콜백 패턴

콜백은 작업의 결과를 전달하기 위해 호출되는 함수이고, 우리가 비동기 작업을 수행하기 위해 필요하다.

자바스크립트는 콜백에 이상적인 언어이다.

3-1-1 연속 전달 방식(CPS: Continuation-passing style)

자바스크립트에서 콜백은 다른 함수에 인자로 전달되어, 작업이 완료되면 작업 결과를 가지고 호출된다.

이런 식으로 함수형 프로그래밍에서 결과를 호출자에게 직접 반환하는 것이 아닌 다른 함수(콜백)로 결과를 전달하는 방식을 연속 전달 방식이라 한다.

동기식 연속 전달 방식

function add(a, b) {
	return a + b
}

간단한 동기 함수이다. 결과가 return 문을 통해 호출자에게 전달된다. 이런 방식을 **직접 스타일(direct style)**이라 하고, 동기식 프로그래밍에서는 일반적으로 이런 직접 스타일로 결과를 반환한다.