이전 글에서 Thread에 대해 정리하면서,

Runnable에 대해서도 정리하였었는데요.


오늘은 Callable과 Runnable을 비교해 보도록 하겠습니다.


참고로 이전에 Runnable을 정리한 글은, 아래링크를 참조해 주세요.

>>> 안드로이드의 Multi Thread,  Runnable, Looper 그리고 Handler <<<



1. Callable & Runnable


Callable은 다른 쓰레드에 의해서 실행되어질 수 있는 클래스의 객체를 위한 interface라는 점에서, 

Runnable과 비슷한 인터페이스인데요.


1-1. Callable


Callable에 대해서 알아보기 위해서,

소스코드를 보도록 하겠습니다.


구현해야할 메소드는 call()인데요.

리턴타입을 정의하기 위해 Generic 을 사용하고 있습니다.


Generic으로 받은 타입으로, 계산된 결과 값을 return 하구요,

결과를 계산하지 못하면 Exception을 내는군요.




또한 Callable은, Runnable처럼 바로 Thread에 인자로 전달할 수는 없구요. 

아래와 같이, ExecutorService객체에 submit()메소드를 사용하여서 전달합니다. (쓰레드 풀을 사용한다는 거죠)




1-2. Runnable


Runnable도 소스코드를 보겠습니다.

구현해야할 메소드는 run()이구요.

return값은 없습니다. 




Runnable은 아래와 같이, Thread에 인자로 바로 전달할 수 있습니다.




간단하게, Callable과 Runnable 을 보았구요.

이번에는 둘을 본격적으로 비교해 보겠습니다.



2. Callable vs Runnable


우선 둘의 공통점은 위에서도 언급했듯이,

다른 쓰레드에서 사용되어 질수 있는 클래스의 객체를 위한 interface란 점인데요.


둘의 큰 차이점은 크게 두 가지 입니다.

  • Callable이 Generic으로 받은 Return 타입으로, return을 하는데 반해서, 
    Runnable은 return값이 없습니다.
  • Callable이 Exception을 낼 수 있는데 반해서,
    Runnable은 그럴 수 없습니다.



3. 정리


사실, 둘의 차이점은 그렇게 많지 않습니다.

오히려, Callable이 Runnable의 확장형 개념인 셈이지요.


실제로, Runnable이 자바 1.0에서 생겨났고, 이후 자바 1.5에서 Callable이 생겨난 것인데요.

기존 Runnable을 그대로 놔두고, 기능을 확장하기 위해서 Callable을 만들었다고 합니다.


+ Recent posts