람다보다는 메소드 참조를 사용하라

람다보다 더 간결하게 사용할 수 있다. 메소드 참조(Method reference)로 말이다. 매개변수 구성(수, 타입, 순서)이 같다면 람다 대신 메소드 참조를 전달하면 같은 결과를 더 보기 좋게 얻을 수 있다. 메소드 참조가 람다를 대체하는 건 아니다. 람다로 할 수 없는 일은 메소드 참조로도 할 수 없다.

단순히 메소드 참조는 람다로 구현했을 경우 길고 복잡해질 때 좋은 대안이 되어준다. 메소드 참조는 기능을 잘 드러내는 이름을 지어줄 수도 있다. 메소드 참조의 유형은 아래의 다섯 가지다.

  1. 정적 메소드를 가리키는 메소드 참조
  2. 한정적 참조 - 수신 객체(receiving object)를 특정하는 한정적 인스턴스 메소드 참조 (함수 객체가 받는 인수와 참조되는 메소드가 받는 인수가 같다.)
  3. 비한정적 참조 - 수신 객체를 특정하지 않는 비한정적 인스턴스 메소드 참조 (함수 객체를 적용하는 시점에 수신 객체를 알려준다.)
  4. 클래스 생성자
  5. 배열 생성자
유형 예시 람다
정적 Integer::parseInt str -> Integer.parseInt(str);
한정적(인스턴스) Instant.now()::isAfter t -> Instant.now.isAfter(t)
비한정적 String::toLowerCase str -> str.toLowerCase()
클래스 생성자 Object::new () -> new Object();
배열 생성자 Object[]::new () -> new Object[0];