정리

익명클래스 방식은 코드가 너무 길기 때문에 자바는 함수형 프로그래밍에 적합하지 않았다. 자바 8에 와서 추상 메서드 하나짜리 인터페이스는 특별한 의미를 인정받아 특별한 대우를 받게 되었다. 람다는 함수나 익명클래스와 개념은 비슷하지만 코드는 훨씬 간결하다. 타입을 명시해야 코드가 더 명활할 때만 제외하고는, 람다의 모든 매개변수 타입은 생략하자. 람다는 이름이 없고 문서화도 못한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야 한다. 람다는 한줄일때 가장좋고 길어야 세줄안에 끝내는 게 좋다. 람다는 자신을 참조할 수 없다. 람다에서의 this 키워드는 바깥 인스턴스를 가리킨다. 그래서 함수객체가 자신을 참조해야 한다면 반드시 익명 클래스를 써야 한다. 람다도 익명클래스처럼 직렬화 형태가 구현별(가령 가상머신별)로 다를 수 있다. 따라서 람다를 직렬화하는 일은 극히 삼가해야 한다. 직렬화해야만 하는 함수객체가 있다면 private 정적 중첩 클래스의 인스턴스를 사용하자.

핵심정리

자바가 8로 판올림되면서 작은 함수 객체를 구현하는데 적합한 람다가 도입되었다. 익명클래스는(함수형 인터페이스가 아닌) 타입의 인스턴스를 만들때만 사용하라. 람다는 작은 함수 객체를 아주 쉽게 표현할 수 있어(이전 자바에서는 실용적이지 않던) 함수형 프로그래밍의 지평을 열었다.