더북(TheBook)

앞선 세 가지 예제 모두에서 동일한 접근법을 살펴봤다. 다시 말해, 코드 블록을 어딘가(스레드 풀, sort 메서드, 버튼)에 전달한다. 그러면 해당 코드가 얼마 후에 호출된다.

지금까지는 자바에서 어딘가에 코드 블록을 전달하는 일이 쉽지 않았다. 즉, 단순히 코드 블록을 전달할 수 없었다. 자바는 객체지향 언어기 때문에, 원하는 코드가 있는 메서드를 포함하는 클래스의 객체를 생성해야 했다.

다른 언어에서는 코드 블록을 직접 다룰 수 있다. 자바 설계자들은 오랜 시간 이 기능의 추가를 막아왔다. 결국, 자바의 강력한 힘은 단순성과 일관성이다. 만일 언어가 조금 더 간결한 코드를 얻게 해주는 모든 기능을 포함하게 되면 관리하기가 엉망이 될 수 있다. 하지만 코드 블록을 직접 다룰 수 있는 다른 언어에서는 스레드 생성이나 버튼 클릭 처리기 등록이 쉬워진 것에 그치지 않고, API의 상당 부분이 더 단순해지고 더 일관성 있고 더 강력해졌다. 자바에서는 특정 함수를 구현하는 클래스의 객체를 받는 방법으로 유사한 API를 작성할 수 있지만, 이러한 API는 사용하기 불편할 수도 있다.

한동안은 함수형 프로그래밍을 위해 자바를 확장할지 여부가 아니라 자바에서 함수형 프로그래밍을 하는 방법이 문제였다. 자바에 잘 맞는 설계가 나오기까지 수년간 실험이 계속되었다. 다음 절에서는 자바 8에서 코드 블록을 다루는 방법을 알아본다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.