더북(TheBook)

함수형 인터페이스로 변환을 설명하기 위해 Arrays.sort 메서드를 고려해보자. 이 메서드의 두 번째 파라미터는 단일 메서드를 갖춘 인터페이스인 Comparator의 인스턴스를 요구한다. 여기에 단순히 람다를 전달해보자.


Arrays.sort(words,

(first, second) -> Integer.compare(first.length(), second.length()));


 

내부적으로, Arrays.sort 메서드는 Comparator<String>을 구현하는 어떤 클래스의 객체를 받는다. 전달받은 객체의 compare 메서드를 호출하면 람다 표현식의 몸체를 실행한다. 이러한 객체와 클래스의 관리는 순전히 구현체의 몫이며, 전통적으로 사용해온 이너 클래스(내부 클래스)inner class 방식보다 훨씬 효율적일 수 있다. 람다 표현식을 객체가 아니라 함수로 생각하고, 함수형 인터페이스에 전달할 수 있다고 인식하는 것이 가장 좋다.

이렇게 인터페이스로 변환되는 점이 람다 표현식을 강력하게 만들어주는 요인이다. 문법은 짧고 단순하다. 다음은 다른 예다.


button.setOnAction(event ->

System.out.println("Thanks for clicking!"));


 

이너 클래스를 사용한 방식보다 훨씬 읽기 쉽다.

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