등장 배경Java 8 이전에는 Future라는 비동기 작업을 위한 클래스가 사용되었다.하지만 실제 개발에 적용해 보면 구조적인 제약이 명확하게 드러난다.결과를 얻기 위해선 항상 대기해야 한다Future#get()은 호출 스레드를 블로킹한다.따라서 여러 비동기 작업을 동시에 수행하더라도, 결국 결과를 순차적으로 기다릴 수밖에 없다.작업 완료 시점을 감지할 방법이 없다Future는 콜백을 등록하거나 완료 시점을 통지받는 기능이 없다.“끝나면 자동으로 다음 일을 실행해라” 같은 패턴이 불가능하다.여러 Future를 결합하기 어렵다Future 간의 관계를 표현할 수 없기 때문에, 두 개 이상의 작업을 병렬로 실행하고 결과를 합치는 로직을 직접 작성해야 했다.보통 ExecutorService, CountDownL..