본문 바로가기
카테고리 없음

이벤트 루프 / 콜백 함수

by Node.js 주니어 개발자 귤 2023. 4. 13.

자바 스크립트는 싱글 스레드로 작동하며 이벤트 루프를 통해 비동기적으로 작업을 처리한다.

 

이벤트 루프는 이벤트 발생 시 해당 이벤트를 처리하는 작업을 큐에 넣고, 이벤트 루프의 작업이 끝나면

큐에 있는 작업을 순차적으로 처리한다.

 

이벤트 루프는 크게 두가지의 큐를 갖고 있다.

 

콜 스택과 테스크 큐

 

콜스택은 현재 실행중인 함수의 정보를 담는 자료구조이고,

테스크 큐는 비동기적으로 처리되어야 할 작업을 담는 자료구조이다.

 

이벤트 루프의 동작 과정은 아래와 같다.

 

1. 현재 실행 중인 작업을 콜 스택에 담는다

2. 이벤트가 발생하면, 해당 이벤트를 처리하는 작업을 테스크 큐에 담는다

3. 콜 스택이 비어 있으면, 테스크 큐에서 작업을 가져와 콜 스택에 담고 실행

4. 다시 1번으로 돌아가 반복

 

 

자바스크립트는 콜 스택이 비어있을 때에만 테스크 큐에 있는 작업을 실행한다.

이렇게 하으로써 자바스크립트는 비동기적으로 작업을 처리할 수 있게 된다.

 

 

 

콜백 함수는 자바 스크립트에서 가장 기본적인 비동기 처리 방식 중 하나이다

콜백 함수란 다른 함수의 인자로 전달되어서 특정 작업이 끝난 후에 실행되는 함수를 말하는것

 

예를 들어 setTimeout 함수는 특정 시간이 지난 후에 콜백 함수를 실행하는 함수

 

setTimeout(function() {

console.log('5초가 지났습니다.');

}, 5000);

 

 

위의 코드에서는 setTimeout  함수에서 첫번째 인자로 익명함수를 전달했고

이 익명 함수가 바로 콜백함수이다, 이 함수는 5초 후에 실행된다.

 

콜백 함수는 비동기적인 처리를 할때 매우 유용하다

예를 들어 서버로부터 데이터를 받아와야 할 때는 네트워크 지연 등의 이유로 데이터를

즉시 받아올 수 없는 경우가 생길 수 있다.

이때 콜백 함수를 사용하여 데이터를 받아온 후에 실행되어야 할 작업을 정의할 수 있다

 

하지만 콜백 함수를 남발하면 코드가 복잡해질 수 있다, 콜백 함수가 중첩되어 사용되는

콜백 지옥 문제가 발생할 수 있고 이는 코드 가독성을 떨어트리고 유지 보수를 어렵게 만든다.

때문에 최근에서는 Promise와 async/await 과 같은 새로운 비동기 처리 방식이 나오면서 콜백 함수의 사용이 줄어들고 있다.