채널톡 아이콘

인프런 커뮤니티 질문&답변

EunKyung Hwang님의 프로필 이미지

작성한 질문수 1

백엔드 개발자 성능 개선 초석 다지기

비동기 방식 활용 해보기

ExecutorService와 CompletableFuture의 차이점과 역할

작성

·

42

·

수정됨

0

안녕하세요! 비동기 코드에 관해 질문이 있습니다. ExecutorService 는 스레드를 관리하는 역할을 하는것이고 CompletableFuture 가 실제로는 비동기 요청을 처리하는 것으로 이해하였는데 맞을까요?

 

Future 은 예외 처리를 할 수 없기 때문에 잘 쓰이기 않을까요??CompletableFuture 가 지원하는 기능이 더 많기 때문에 주로 CompletableFuture 를 사용하나요?

답변 2

0

인큐(INCU)님의 프로필 이미지
인큐(INCU)
지식공유자

안녕하세요! EunKyung Hwang 님

 

-ExecutorService는 스레드 풀을 관리하고, 비동기 작업을 수행할 스레드를 제공

-CompletableFuture는 비동기 작업을 수행하고 결과를 처리하는 API

-추가로 CompletableFuture를 사용할 때 별도의 Executor를 명시적으로 설정하지 않으면, 내부적으로 ForkJoinPool.commonPool()을 사용

 

CompletableFuture는 Future을 단점을 보완하여 나온것으로 Future 단점을 키워드로 찾아보는 것을 추천드립니다.!

 

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. EunKyung Hwang님.

비동기 프로그래밍에서 ExecutorServiceCompletableFuture의 역할과 차이점에 대해 질문하셨군요.

  1. ExecutorService

    • 역할: Java에서 ExecutorService는 스레드 풀을 관리하는 인터페이스로, 스레드의 생성을 제어하고, 실행을 관리하며, 종료 및 기타 상태 정보를 처리합니다. 주로 스레드 생성을 제어하고, 작업을 스레드 풀 내에서 비동기적으로 실행하기 위해 사용됩니다.
    • 관련 링크: ExecutorService Java Documentation
  2. CompletableFuture

    • 역할: CompletableFuture는 Java 8에서 도입된 클래스로, 비동기 프로그래밍을 더 직관적이고 강력하게 수행할 수 있도록 도와줍니다. CompletableFuture는 비동기 작업을 처리하고, 작업 완료 후에 콜백 메소드(예: thenApply, thenAccept, exceptionally 등)를 이어붙여 후속 작업을 처리하는 방식으로 사용할 수 있습니다.
    • 장점: 비동기 작업의 결과를 기다리거나 비동기 작업이 완료된 각각의 특정 시점에 작업을 수행하고자 할 때 유용합니다. 또한, 예외 처리를 위한 메소드도 제공하여 예외 발생 시의 적절한 대응을 쉽게 할 수 있습니다.
    • 관련 링크: CompletableFuture Java Documentation
  3. Future와의 비교

    • Future는 비동기로 작업의 결과를 받을 수 있는 방법을 제공하는 기본 인터페이스이지만, 블로킹 방식으로 결과를 기다리거나 예외를 적절히 처리하는데 있어 한계가 있었습니다.
    • CompletableFuture는 보다 풍부한 기능 셋을 제공하여 비동기 프로그래밍 패턴을 유연하고 효율적으로 구현할 수 있으며, 이는 Future에 비해 더욱 강력한 사용성을 제공합니다. 그로 인해, 많은 경우 CompletableFuture가 더 선호됩니다.

이와 관련된 추가적인 질문이나 궁금한 사항이 있다면 언제든지 말씀해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.