동기적 코드와 비동기적 코드
동기적(Synchronous) 코드
어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다린 후 다음 작업을 수행하는 방식 (순차적 코드 진행)
요청을 보낸 후 응답 (결과물)을 받아야지만 다음 코드가 동작된다
모든 일은 순차적으로 실행되며 어떤 작업이 수행중이라면 다음 작업은 대기하게 된다
- 장점: 코드가 순차적으로 실행되므로 설계가 간단하고 직관적이다
- 단점: 요청에 대한 결과가 나올때까지 다음코드는 대기해야한다
// 동기적인 코드 (순차적으로 실행되는 코드)
console.log(1); // 1번째
console.log(2); // 2번째
console.log(3); // 3번째
비동기적(Asynchronous) 코드
언제 코드가 실행될지 예측할수 없는것 (비순차적 코드 진행)
요청을 보낸 후 응답(결과물)이 언제 올지 알 수가 없으며 응답을 기다리는 동안 다른 코드가 실행된다
특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것
- 장점: 결과가 주어지는데 시간이 걸리더라도 그동안 다른 작업이 가능해 효율적이다
- 단점 : 설계가 동기보다 복잡하다
// 콜백(setTimeout)을 이용한 비동기적인 코드(비순차적으로 실행되는 코드)
console.log(1); // 1번째
setTimeout(() => console.log(2), 1000); // 3번째
console.log(3); // 2번째
자바스크립트는 동기적인 코드다
호이스팅이 된 후 부터 코드가 작성한 순서에 맞춰 순차적으로 실행된다.
호이스팅(Hoisting)
자바스크립트 코드에 선언된 함수 및 변수를 코드 상단으로 끌어올리는 것
호이스팅의 대상
- var 변수 선언, 함수 선언 (var 변수 선언, 함수 선언만 호이스팅이 되며 할당은 호이스팅이 발생하지 않는다)
- let/const 변수 선언과 함수 표현식(함수를 변수에 저장)에서는 호이스팅이 발생하지 않는다
비동기적 코드의 필요성
자바스크립트는 호이스팅이 된 후 부터 코드가 작성한 순서에 맞춰 순차적으로 실행되는 동기적인 코드다. 하지만 때때로 자바스크립트에서 코드가 비동기적으로 실행되어야한다. 자바스크립트에서 비동기 처리가 필요한 이유는 화면에서 서버로 데이터를 요청했을 때 서버가 언제 그 요청에 대한 응답을 줄지도 모르는데 마냥 다른 코드를 실행 안 하고 기다릴 순 없기 때문이다.
자바스크립트를 비동기적으로 처리하고 싶을때
비동기 처리: 특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것
자바스크립트를 비동기적으로 처리할때는 아래의 3가지 방식을 사용할 수 있다. 콜백함수, 프로미스, async/await를 사용하면 특정 로직이 끝났을때 원하는 동작을 실행시킬 수 있다.
- callback: 함수의 파라미터로 함수를 넘겨주고 이를 내부에서 호출하는 것 (동기적/비동기적 방식 두가지가 있음)
- promise: 콜백지옥의 단점을 보완하기 위해 사용되는 자바스크립트 비동기 처리에 사용되는 객체
- async/await: 프로미스 체이닝의 단점을 보완하기 위해서 사용되는 자바스크립트 비동기 처리에 사용되는 syntactic sugar(문법은 같으나 사용자가 더 직관적으로 사용할 수 있는 기능)
Reference
'JavaScript' 카테고리의 다른 글
| [자바스크립트] 프로미스 (프로미스 체이닝, 프로미스 에러 핸들링) (0) | 2022.11.18 |
|---|---|
| [자바스크립트] 콜백함수와 콜백지옥 (0) | 2022.11.18 |
| [자바스크립트] 이벤트 관리 방법 (버블링, 캡쳐링, 이벤트 위임) (0) | 2022.11.18 |
| [자바스크립트] 자바스크립트에서 this란? (0) | 2022.11.18 |
| [자바스크립트] 객체 구조분해할당시 key 이름 다시 지정해주기 (0) | 2022.08.10 |
댓글