본문 바로가기
CS

[CS] 동기와 비동기

by 시간많은백수 2023. 9. 17.
반응형

동기와 비동기의 차이는 간단하게 동기는 맡은 일을 끝내고 다음일을 시작하며, 비동기는 응답여부에 상관없이 다음일을 시작합니다.

✔️동기 (Synchronous) 프로그래밍이란?

동기 프로그래밍은 작업이 순차적으로 실행되는 방식입니다. 간단히 말하면, 한 작업이 시작되고 완료될 때까지 다음 작업이 대기하는 방식입니다. 이것은 일반적으로 우리가 일상적으로 하는 작업과 유사합니다. 예를 들어, 요리를 할 때, 각 단계가 다음 단계를 기다리는 것과 같습니다. 

 

💡동기 (Synchronous) 프로그래밍 특징

  • 순차적 실행: 작업들은 순서대로 실행되며, 한 작업이 완료되기 전에 다음 작업은 시작되지 않습니다.
  • 직관적: 코드가 순차적이므로 이해하기 쉽고 디버깅하기도 상대적으로 쉽습니다.
  • 블로킹: 한 작업이 다른 작업을 대기하게 되면 이를 "블로킹"이라고 합니다. 이는 성능 저하를 일으킬 수 있습니다.

동기 프로그래밍은 간단하고 직관적이지만, 작업이 오래 걸리는 경우에는 전체 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다.

 

✔️비동기 (Asynchronous) 프로그래밍이란?

비동기 프로그래밍은 작업이 동시에 여러 개 실행될 수 있고, 한 작업이 완료되기를 기다리지 않고 다른 작업을 계속할 수 있는 방식입니다. 이는 주로 네트워크 요청, 파일 I/O, 이벤트 처리와 같이 시간이 오래 걸리는 작업을 다룰 때 유용합니다. 

 

💡비동기 (Asynchronous) 프로그래밍 특징

  • 동시성: 여러 작업이 동시에 실행될 수 있으므로 성능 향상이 가능합니다.
  • 비동기 콜백: 비동기 작업이 완료되면 콜백 함수를 호출하여 결과를 처리합니다.
  • 논 블로킹: 다른 작업을 대기하지 않고 계속해서 다음 작업을 수행합니다.

 

비동기 프로그래밍은 성능 면에서 이점을 제공할 수 있지만, 코드가 복잡해질 수 있고 콜백 지옥(callback hell)과 같은 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 Promises, async/await와 같은 도구가 도입되었습니다.

 

✔️Promises와 async/await

Promises와 async/await는 비동기 코드를 관리하고 더 읽기 쉽게 만드는 도구입니다. Promises는 비동기 작업의 결과를 나타내며, async/await는 비동기 코드를 동기식처럼 작성할 수 있게 도와줍니다. 아래는 간단한 예제입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Promise 사용 예제
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("데이터가 도착했습니다.");
    }, 2000);
  });
}
 
fetchData()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });
 
// async/await 사용 예제
async function fetchDataAsync() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}
 
fetchDataAsync();
 
 
cs

 

반응형