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 완료

비교

특성 동기 비동기
실행 방식 순차적으로 실행 동시에 여러 작업을 실행
대기 여부 현재 작업이 완료될 때까지 대기 현재 작업을 기다리지 않고 진행
복잡성 상대적으로 간단 콜백, 프라미스, 스레드 관리 필요
사용 예시 파일 읽기, 계산 작업 웹 요청, 파일 다운로드, 이벤트 처리
반응형