Future란 무엇인가?
비동기 작업의 결과를 나중에 받을 수 있는 객체인 Future 는 Java의 java.util.concurrent 패키지에서 제공된다.
작업이 완료될 때까지 기다리지 않고 다른 작업을 할 수 있으며, 완료되면 결과를 받을 수 있는 유연성을 제공한다.
사용 예시
데이터베이스 조회, 원격 API 호출과 같은 시간이 오래 걸리는 작업을 비동기 처리할 때 유용하다
특징
- 비동기 실행 : 작업이 백그라운드에서 실행된다
- 결과 대기 : 완료될 때까지 기다리지 않고, 작업이 끝난 후 결과를 가져온다
- 작업 상태 확인 : 작업이 완료되었는지, 취소되었는지 확인이 가능하다
Future의 주요 메서드
Future 는 여러 메서드를 통해 비동기 작업을 관리한다
- get() : 작업이 완료딜 때까지 기다렸다가 결과를 반환한다. 작업이 완료되지 않으면 대기 상태
- isDone() : 작업이 완료되었는지 확인할 수 있다. 완료 여부를 체크하여 결과를 가져올지 결정할 수 있다.
- cancel() : 작업을 중단할 수 있다. 필요할 경우 mayInterruptIfRunning 파라미터를 true 로 설정하여 즉시 중단도 가능하다
Future 사용해보기
- executorService.submit() : 비동기 작업을 제출해서 즉시 실행한다
- future.get() : 비동기 작업이 완료될 떄까지 기다린 후 결과를 반환한다
- executorService.shutdown() : 모든 작업이 완료되면 스레드 풀을 종료한다
Future 의 한계
- 결과를 알림 없이 가져와야 함 : get() 으로 직접 결과를 가져와야 하며, 작업이 완료될 때 알림을 받을 수 없다
- 비동기 작업 체인 구성 어려움 : 작업이 완료된 후에 후속 작업을 연결하기 어려워 복잡한 비동기 로직을 구성하기에는 한계가 있다
실무에서 활용하기
- 여러 Future 관리 : 여러 비동기 작업을 Future 리스트로 관리하고, isDone() 으로 완료 상태를 체크하며, 필요할 때 get() 으로 결과를 가져올 수 있다.
- 타임아웃 설정 : get(long timeout, TimeUnit unit) 메서드를 사용하여 대기 시간을 제한할 수 있다.
- 취소 기능 활용 : 작업이 중단되어야 하는 조건에서 cancel() 을 사용하여 불필요한 리소스 낭비를 막을 수 있다.
Future 는 Java에서 비동기 작업을 처리하는 기본적인 도구이다. 비동기 작업이 필요한 상황에서 코드의 효율성과 유연성을 높여주지만, 복잡한 비동기 로직에서는 CompletableFuture 와 같은 더 강력한 도구가 필요할 수 있다.
-> CompletableFutue 알아보기 https://yujuharu.tistory.com/21
'Java > 기본' 카테고리의 다른 글
[Java] 트랜잭션 (0) | 2024.11.11 |
---|---|
[Java] CompletableFuture (0) | 2024.11.08 |
[Java] Java에서 final로 진짜_최종_최종_최종 불변 객체 만들기 (0) | 2024.10.31 |
[Java] Java에서 final로 불변 객체 만들기 (0) | 2024.10.30 |
[Java] 스트림(Stream) (0) | 2024.10.27 |