JAVA
[JAVA] 동기와 비동기(Synchronous / Asynchronous) 완벽 가이드 : 실행 방식, 대기 여부, 복잡성 필교
yebin0322
2025. 2. 3. 10:43
반응형
Synchronous(동기)
- '동시에 일어난다'
- 한 작업이 끝나야만 다음 작업이 시작됨
특징
- 순차적 실행 : 작업이 순차적으로 실행되며, 하나의 작업이 완료되어야 다음 작업으로 넘어감
- 대기 : 현재 작업이 완료될 때까지 다른 작업이 대기해야 함
예시
- 파일 읽기 : 파일을 읽는 동안 프로그램은 파일이 완전히 읽힐 때까지 대기
- HTTP 요청 : 요청을 보내고 응답이 올 때까지 대기
- 요리하는 상황에서, 물이 끓는 동안 면 넣기를 할 수 없는 것
public class SynchronousExample {
public static void main(String[] args) {
System.out.println("작업 1 시작");
try {
Thread.sleep(2000); // 2초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("작업 1 완료");
System.out.println("작업 2 시작");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("작업 2 완료");
}
}
작업 1 시작
작업 1 완료
작업 2 시작
작업 2 완료
Asynchronous(비동기)
- '동시에 일어나지 않는다'
- 작업이 완료되기를 기다리지 않고 다른 작업을 동시에 진행할 수 있음
특징
- 병렬 처리 : 여러 작업을 동시에 처리할 수 있으며, 하나의 작업이 완료되지 않아도 다른 작업을 계속 진행할 수 있음
- 콜백 : 작업이 완료되면 특정 함수(콜백)을 호출하여 결과를 처리
예시
- 파일 다운로드 : 다운로드를 시작한 후, 다운로드가 완료될 때까지 기다리지 않고 다른 작업 수행
- 이벤트 리스너 : 버튼 클릭 이벤트와 같은 사용자 입력을 처리할 때, 입력이 발생했을 때만 처리
- 요리하는 과정에서, 물이 끓는 동안 스프를 넣는 것
console.log("작업 1 시작");
setTimeout(() => {
console.log("작업 1 완료");
}, 2000); // 2초 후 작업 1 완료
console.log("작업 2 시작");
// 작업 2는 즉시 실행됨
console.log("작업 2 완료");
작업 1 시작
작업 2 시작
작업 2 완료
작업 1 완료
비교
특성 | 동기 | 비동기 |
---|---|---|
실행 방식 | 순차적으로 실행 | 동시에 여러 작업을 실행 |
대기 여부 | 현재 작업이 완료될 때까지 대기 | 현재 작업을 기다리지 않고 진행 |
복잡성 | 상대적으로 간단 | 콜백, 프라미스, 스레드 관리 필요 |
사용 예시 | 파일 읽기, 계산 작업 | 웹 요청, 파일 다운로드, 이벤트 처리 |
반응형