1. 동기(Synchronous) 처리란?
1.1 동기 처리의 개념
동기 처리에서 작업들은 순차적으로 실행됩니다. 하나의 작업이 끝나기 전까지 다음 작업은 시작되지 않습니다. 프로그램은 한 작업이 완료될 때까지 기다린 후에야 다음 작업으로 넘어가므로, 코드의 실행 순서가 예측 가능하고 직관적입니다.
1.2 동기 처리의 특징
- 순차적 실행: 모든 작업이 순서대로 처리되므로, 코드의 흐름이 명확하고 예측 가능합니다.
- 간단한 디버깅: 모든 작업이 순서대로 이루어지기 때문에 디버깅이 비교적 쉽습니다.
- 잠재적 성능 문제: 시간이 오래 걸리는 작업이 있다면, 그 작업이 완료될 때까지 다른 작업들이 모두 대기해야 하므로 성능에 영향을 줄 수 있습니다.
1.3 동기 처리 예제
public class SynchronousExample {
public static void main(String[] args) {
System.out.println("작업 1 시작");
int result = add(2, 3); // 이 작업이 끝나야 다음 줄로 넘어감
System.out.println("결과: " + result);
System.out.println("작업 1 완료");
}
public static int add(int a, int b) {
return a + b;
}
}
설명:
- 이 코드에서 add 메서드를 호출하면, 이 메서드가 완료될 때까지 프로그램은 기다립니다. 그 결과를 출력한 후에야 다음 작업(여기서는 "작업 1 완료" 출력)이 실행됩니다.
- 이 방식은 코드가 매우 직관적이며, 실행 순서를 쉽게 예측할 수 있습니다. 하지만 만약 add 메서드가 시간이 많이 걸리는 작업이라면, 그 동안 프로그램은 멈춰 있게 됩니다.
2. 비동기(Asynchronous) 처리란?
2.1 비동기 처리의 개념
비동기 처리에서는 작업이 완료될 때까지 기다리지 않고 다음 작업을 계속 진행할 수 있습니다. 작업이 비동기적으로 처리되면, 프로그램은 그 작업이 끝나기를 기다리지 않고 다른 작업을 동시에 수행할 수 있습니다. 이로 인해 프로그램의 응답성이 향상되고, 자원을 더 효율적으로 사용할 수 있습니다.
2.2 비동기 처리의 특징
- 병렬 실행: 여러 작업을 동시에 처리할 수 있어, 프로그램의 응답성을 높일 수 있습니다.
- 복잡한 흐름 제어: 비동기 작업들이 동시에 실행되기 때문에 코드의 흐름이 복잡해질 수 있습니다.
- 성능 향상: 시간이 오래 걸리는 작업을 비동기적으로 처리하여 전체 프로그램의 성능을 개선할 수 있습니다.
2.3 비동기 처리 예제
import java.util.concurrent.CompletableFuture;
public class AsynchronousExample {
public static void main(String[] args) {
System.out.println("작업 1 시작");
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> add(2, 3));
System.out.println("다른 작업 진행 중...");
int result = future.join(); // 비동기 작업이 완료될 때까지 기다림
System.out.println("결과: " + result);
System.out.println("작업 1 완료");
}
public static int add(int a, int b) {
return a + b;
}
}
설명:
- CompletableFuture.supplyAsync 메서드를 사용하여 add 메서드를 비동기적으로 실행합니다. 이 작업은 다른 작업들과 동시에 실행될 수 있습니다.
- "다른 작업 진행 중..."이라는 메시지는 add 메서드가 완료되기 전에 출력될 수 있습니다. 그 후, future.join()을 호출하여 비동기 작업이 완료될 때까지 기다린 후 결과를 출력합니다.
- 비동기 처리를 사용하면, 시간이 오래 걸리는 작업이 다른 작업의 진행을 방해하지 않도록 할 수 있습니다.
3. 동기 처리와 비동기 처리의 선택 기준
- 동기 처리는 작업들이 순차적으로 실행되어야 하거나, 코드가 단순하고 직관적인 흐름을 유지해야 할 때 적합합니다. 디버깅이 쉽고, 작업 간의 순서가 중요할 때 유용합니다.
- 비동기 처리는 시간이 오래 걸리는 작업을 비효율적으로 기다리지 않도록 하여, 프로그램의 응답성을 높이고 성능을 개선하고자 할 때 적합합니다. 특히 네트워크 요청, 파일 I/O 작업 등에서 자주 사용됩니다.
'CS 지식' 카테고리의 다른 글
TDD (0) | 2024.09.23 |
---|---|
예외처리 (2) | 2024.09.08 |
SOLID 원칙 (0) | 2024.09.01 |
추상 클래스와 인터페이스 (0) | 2024.08.25 |
오버로딩과 오버라이딩 (0) | 2024.08.15 |