자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했다.
이런 인터페이스의 인스턴스를 함수 객체라고 하여, 특정 함수나 동작을 나타내는 데 썼다.
JDK 1.1이 등장하면서 함수 객체를 만드는 주요 수단은 익명 클래스가 되었다.
전략 패턴처럼, 함수 객체를 사용하는 과거 객체 지향 디자인 패턴에는 익명 클래스면 충분했다.
자바 8에 와서 추상 메서드 하나짜리 인터페이스는 특별한 의미를 인정받아 특별한 대우를 받게 되었다.
지금은 함수형 인터페이스라 부르는 이 인터페이스들의 인스턴스를 람다식을 사용해 만들 수 있게 된 것이다.
람다는 함수나 익명 클래스와 개념은 비슷하지만 코드는 훨씬 간결하다.
Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length()));
여기서 람다, 매개변수(s1, s2), 반환 값의 타입은 각각 String, int 지만 코드에서는 언급이 없다.
컴파일러가 문맥을 살펴 타입을 추론해 준다.
타입의 경우 타입을 명시해야 코드가 더 명확할 때만 제외하고는, 람다의 모든 매개변수 타입은 생략하자.
람다를 보면 이름이 없고 문서화도 못 한다.
따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야 한다.
람다는 한 줄일 때 가장 좋고 길어야 세줄 안에 끝내는 것이 좋다.
람다는 함수형 인터페이스에서만 쓰인다.
마지막으로, 람다는 자신을 참조할 수 없다.
람다에서 this 키워드는 바깥 인스턴스를 가리킨다.
반면 익명 클래스에서의 this는 인스턴스 자신을 가리킨다.
글 잘 봤습니다, 많은 도움이 되었습니다.