🔄 동기(Synchronous)란?
"기다릴게, 네가 끝날 때까지!"
- 함수 A가 함수 B를 호출하고, B가 끝날 때까지 A는 멈춰 있음.
- 즉, 순차적으로 작업이 실행됩니다.
✅ 예시
String data = getData(); // getData가 끝나야 다음 줄 실행
System.out.println("데이터: " + data);
📌 getData() 함수가 완료될 때까지 기다렸다가 다음 코드 실행됨!
🚀 비동기(Asynchronous)란?
"먼저 갈게! 네가 끝나면 알려줘~"
- 함수 A가 함수 B를 호출하고 B의 결과를 기다리지 않고 자기 일을 먼저 처리합니다.
- 결과는 콜백, Future, 이벤트 등을 통해 나중에 받습니다.
✅ 예시 (Spring)
@Async
public void sendEmail() {
// 이메일 전송 (오래 걸림)
}
sendEmail() 호출 후, 즉시 다음 코드 실행됨!
⏳ 블로킹(Blocking)이란?
"진짜 멈춰! 아무것도 못 해!"
- 어떤 작업이 완료될 때까지 프로그램이 멈추는 상태예요.
- 제어권도 돌아오지 않음, 사용자 반응도 멈춤 😵
🧠 블로킹은 "동기"의 한 형태일 수 있지만,
비동기도 블로킹될 수 있어요! 예: future.get() 같이 결과 기다릴 때
⚡ 정리 요약표
구분 설명 실행 흐름
동기 | 작업이 끝날 때까지 기다림 | 순차적 |
비동기 | 작업 끝나기 전 다음 작업 수행 | 병렬 가능 |
블로킹 | 결과 나올 때까지 멈춤 | 응답 전까지 대기 |
🎉 마무리
- 동기는 순서대로!
- 비동기는 병렬로!
- 블로킹은 멈추는 것!
🚀 비동기는 성능을 높이지만, 동시성 관리나 예외 처리에는 주의가 필요해요.
동기와 비동기의 차이점은 무엇인가요?
동기와 비동기는 호출하는 함수의 작업 완료를 기다리는지 여부의 차이가 있습니다. 함수 A가 동기로 함수 B를 호출하면 A는 B의 작업이 완료될 때까지 기다려야 합니다. 따라서 작업이 순차적으로 진행됩니다. 반면, 함수 A가 비동기로 함수 B를 호출하면 A는 B의 작업 완료를 신경 쓰지 않고 따로 동작합니다. 따라서 작업이 순차적으로 진행되지 않습니다.
블로킹과 동기는 어떤 차이가 있나요? 🤔
두 개념은 유사하면서도 다른데요. 동기 호출에서는 호출된 함수가 작업을 완료할 때까지 호출한 함수가 기다립니다. 즉, 작업이 순차적으로 진행되는 것을 의미합니다. 반면, 블로킹은 함수가 호출된 후, 호출한 함수의 결과를 기다리기 위해 실행을 멈추는 상태를 의미합니다. 즉, 제어권이 반환되지 않고 대기하는 상황입니다.
728x90
'1일 1CS(Computer Science)' 카테고리의 다른 글
공유 락과 배타 락에 대해서 설명해주세요. (0) | 2025.04.21 |
---|---|
이벤트 전파(event propagation)에 대해서 설명해주세요. (0) | 2025.04.21 |
CommonJS와 ES Module의 차이점에 대해서 설명해주세요. (0) | 2025.04.21 |
동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요? (0) | 2025.04.16 |
자바스크립트 함수에 대해서 아는대로 설명해주세요. (1) | 2025.04.16 |