본문 바로가기

JavaScript

비동기

비동기(Asynchronous) 처리와 비동기 함수

비동기 처리는 요청을 보내고 그 응답을 기다리지 않고 바로 다음 작업을 진행하는 방식이다. 즉, 요청을 보내고 결과가 나올 때까지 기다리지 않고 다른 작업을 동시에 처리할 수 있는 장점이 있다. 이런 방식은 주로 논블로킹이라고 부르며, 여러 작업을 동시에 처리할 수 있게 해준다.

JavaScript에서 비동기 처리

자바스크립트는 기본적으로 싱글 스레드 기반이기 때문에 한 번에 하나의 작업만 처리할 수 있다. 하지만 비동기 처리를 통해 여러 작업을 동시에 할 수 있도록 런타임 환경이 비동기 처리를 도와준다. 예를 들어, 자바스크립트는 setTimeout()과 같은 함수를 통해 비동기적으로 작업을 실행할 수 있다.

setTimeout(() => {
    console.log("1초 후 실행");
}, 1000);  // 1000ms (1초) 후에 실행

콜백 함수와 콜백 함수 지옥

비동기 작업을 여러 번 처리할 때 콜백 함수를 사용한다. 하지만 여러 개의 비동기 작업을 중첩할 때 콜백 함수 지옥(Callback Hell)이 발생할 수 있다. 이는 코드가 깊어지고 가독성이 떨어지며, 관리하기 어려운 코드가 될 수 있다.

프로미스(Promise)

콜백 함수 지옥을 피하기 위해 프로미스라는 개념이 등장했다. 프로미스는 비동기 작업을 처리할 때, 작업이 완료되면 처리할 방법을 지정할 수 있도록 해준다.

let promise = new Promise((resolve, reject) => {
    let success = true;
    if (success) {
        resolve("성공");
    } else {
        reject("실패");
    }
});

promise
    .then((message) => {
        console.log(message);  // 성공시 "성공" 출력
    })
    .catch((message) => {
        console.log(message);  // 실패시 "실패" 출력
    });

async와 await

asyncawait는 프로미스를 더 쉽게 사용하기 위한 문법이다. async 함수는 항상 프로미스를 반환하며, await은 프로미스가 해결될 때까지 기다린다. 이를 사용하면 비동기 작업을 동기적으로 작성한 것처럼 다룰 수 있어 가독성이 좋아진다.

async function fetchData() {
    let result = await fetch('https://api.example.com/data');
    let data = await result.json();
    console.log(data);
}

fetchData();  // 데이터를 받아오는 비동기 작업

async와 await을 사용하면 비동기 처리가 동기적 코드처럼 실행될 수 있게 된다. await이 실행되면 프로미스가 해결될 때까지 기다리고, 그 후 다음 코드를 실행한다.

'JavaScript' 카테고리의 다른 글

고차함수  (0) 2024.05.27
JS브라우저 DOM  (0) 2024.05.24
실습  (0) 2024.05.24
ES6  (0) 2024.05.23
클로저 - 원래 스코프 내부에서는 외부로 접근 가능한거 아니야?  (0) 2024.05.22