blocking
- 하나의 작업이 끝날 때까지, 이어지는 작업을 막는 것
synchronous(동기적)
- 시작 지점과 완료 지점이 같은 상황
- 커피를 먼저 주문한 사람1, 사람1의 주문이 끝나고(완료시점) 사람2가 주문을 시작했다(시작 시점).
- 위에 예시처럼 말고, 좀 더 효율적으로 커피숍을 운영하는 방법
- 커피 주문이 blocking 되지 않고, 언제든지 주문이 가능하게 한다.
- 커피가 완성되는 즉시 제공한다.
- 사람1의 완료시점과 사람2의 시작시점이 같은 필요가 없다.
- 그래서 Node.js를 non-blocking하고, 비동기적(asynchoronous)으로 작동하는 런타임으로 개발하게 되었다.
- JS의 비동기적 실행은 웹 개발에서 특히 유용하다.
- 비동기적으로 작동되어야 효율적인 작업들
- 백그라운드 실행, 로딩 창 등의 작업
- 인터넷에서 서버로 요청을 보내고, 응답을 기다리는 작업
- 큰 용량의 파일을 로딩하는 작업
고차함수와 콜백
- 고차함수의 개념을 한 번 복습해보면
- 다른 함수를 인자로 전달받을 수 있다.
- 고차함수의 인자로 전달되는 함수를 콜백 함수라고 한다.
- 고차함수는 다른 함수를 리턴할 수 있다.
- 함수를 리턴하는 함수 와 함수를 인자로 받는 함수 모두 고차함수 이다.
- 고차함수는 콜백 함수와 커리 함수의 상위 개념이다.
- 콜백 함수를 전달 받은 caller 함수는, 함수 내부에서 이 콜백함수를 호출할 수 있다.
caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수 있다. 아예 호출하지 않을 수도 있고, 여러 번 실행할 수도 있다. 앞으로는 특정 작업의 완료 후에 호출하는 경우를 자주 접할 것이다.
기타 질문
let numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
- 렇게 하면 오름차순으로 되고 sort()만하면 내림차순으로 된다?