Java/기본

[Java] Future

댕주 2024. 11. 8. 19:59

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