이전 까지 동작 파라미터화를 이용해서 변화하는 client의 요구사항에 효과적으로 대응하는 코드를 구현 및 정의한 코드 블록을 다른 메서드로 전달할 수 있다는 것을 알게 되었다. anonymous class 로 다양한 동작을 구현할 수 있지만 코드가 아직까지 불편함을 느끼게 만들었다. 이를 개선한 자바8의 람다 표현 식을 3장에서 설명한다. 전반적인 내용을 다루는 해당 3장이 제일 중요하다. 따라서, 간추리지 않고 책의 내용을 거의 인용 했다고 봐도 무방하다.
익명 클래스처럼 이름이 없는 함수이면서 메서드를 인수로 전달할 수 있다. → 익명 클래스와 유사하다. 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 확인해볼 것이다.
(Integer i) -> return "a" +i;
(String s) -> {"Iron Man";}
람다표현식 : 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.
→ 2장에서 확인한 것처럼 코드를 전달하는 과정에서 자질구레한 코드가 많이 생긴다. 이를 람다로 해결할수 있다. 즉, 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있게된 것이다. 또한 동작 파라미터를 이용할 때 익명클래스 등 정해진 판에 박힌 코드를 구현할 필요가 없어졌다. 예시로 알아보자.
// 기존
Comparator<Apple> byWeight = new Comparator<Apple>(){
public int compare(Apple a1, Apple a2){
return a1.getWeight().compareTo(a2.getWeight());
}
};
// 람다 이용
Comparator<Apple> byWeight =
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
이렇게 구현하면 compare 메서드의 바디를 직접 전달하는 것처럼 코드를 전달할 수 있다.