메서드 참조

함수 객체를 람다보다 간결하게 만드는 방법이다.

//람다
map.merge(key, 1, (count, incr) -> count + incr);

//정적 메서드 sum의 참조 전달
map.merge(key, 1, Integer::sum);

람다로 구현했을 때 너무 길거나 복잡하다면 메서드 참조로 변환하면 좋다.

메서드 참조로 변환하는 것이 항상 이득은 아니다

메서드와 람다가 같은 클래스 안에 있는 경우에 람다가 메서드 참조보다 간결할 때가 있다.

//GoshThisClassNameIsHumongous 클래스 안에 다음 코드가 있다면
service.execute(GoshThisClassNameIsHumongous::action);

//람다로 대체
service.execute(() -> action);

java.util.function이 제공하는 제네릭 정적 팩터리 메서드인 Function.identity()를 사용하는 것보다 같은 기능의 람다 (x→x)를 사용하는 것이 코드도 짧고 명확하다.

메서드 참조 유형

정적 메서드를 가리키는 메서드 참조

가장 흔한 유형이며 앞의 예시에서 나온 메서드 참조이다.

인스턴스 메서드 참조 유형

  1. 수신 객체(receiving object 참조 대상 인스턴스)를 특정하는 한정적(bound) 인스턴스 메서드 참조