Callable — 결과를 반환하고 예외를 던질 수 있는 태스크
Callable — 결과를 반환하고 예외를 던질 수 있는 태스크
Callable<V>는 결과를 반환하고 예외를 던질 수 있는 태스크를 나타내는 함수형 인터페이스예요. Runnable과 달리 작업 결과를 값으로 돌려받고 싶을 때 사용해요.
본문
개념 이해하기
Callable은 결과를 반환하고 예외를 던질 수 있는 태스크예요. 구현자는 인자가 없는 단일 메서드 call을 정의해요.
@FunctionalInterface
public interface Callable<V>
Callable은 Runnable과 비슷해요 — 둘 다 인스턴스가 다른 스레드에 의해 실행될 수 있는 클래스를 위해 설계됐어요. 다만 Runnable은 결과를 반환하지 않고 검사 예외(checked exception)를 던질 수 없어요. 반면 Callable.call()은 Exception을 선언할 수 있고 V 타입 결과를 반환해요. 타입 매개변수 V는 call 메서드의 결과 타입이에요.
Executors 클래스에는 다른 흔한 형태를 Callable로 변환해주는 유틸리티 메서드가 있어요. Executor 서비스에서 submit()으로 제출하면 Future를 통해 결과를 받을 수 있어요.
메서드
V call() throws Exception
결과를 계산해 반환하거나, 계산할 수 없으면 예외를 던져요.
- 반환: 계산된 결과
Exception— 결과를 계산할 수 없을 때
활용 예
Callable<Integer> task = () -> {
// 계산 수행
return 42;
};
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<Integer> future = pool.submit(task);
int result = future.get(); // 결과를 받아옴