동기는 작업이 순차적으로 실행되는 방식입니다.
한 작업이 완료되기 전까지는 다음 작업이 시작되지 않습니다.
System.out.println("작업 1 시작");
Thread.sleep(1000); // 1초 동안 대기
System.out.println("작업 1 완료");
System.out.println("작업 2 시작");
비동기는 작업이 병렬적으로 실행되는 방식입니다.
한 작업이 실행되는 동안 다른 작업이 진행될 수 있습니다.
CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000); // 1초 대기
System.out.println("비동기 작업 완료");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("다른 작업 실행 중");
| 특징 | 동기 | 비동기 |
|---|---|---|
| 작업 실행 방식 | 순차적으로 실행 | 병렬적으로 실행 |
| 결과 반환 | 작업 완료 후 결과 반환 | 작업 완료 후 콜백 또는 Future로 결과 반환 |
| 성능 | 대기 시간이 길면 성능 저하 | 자원을 효율적으로 사용 가능 |
| 사용 예시 | 데이터베이스 쿼리, 파일 읽기/쓰기 | 네트워크 요청, 사용자 인터페이스 응답 처리 |
동기
비동기
동기와 비동기의 차이를 이해하며, 상황에 맞는 방식의 중요성을 알게 되었습니다. Java의 CompletableFuture를 사용해 비동기 작업을 구현하면서 자원을 효율적으로 사용하는 방법을 배웠고, 비동기 작업의 콜백 지옥을 방지하기 위한 코드 구조화의 중요성도 깨달았습니다. 동기와 비동기를 적절히 조합하여 효율적인 시스템 설계가 가능하다는 점이 인상 깊었습니다.