티스토리 뷰

반응형

메서드 참조

람다가 익명클래스보다 간결하다.

그런데 자바에서 함수 객체를 람다보다 간결하게 만드는 방법이 메서드 참조이다.

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

위의 람다를 사용한 코드는 count와 incr이 특별이 하는 일 없이 공간만 차지하게 된다.

그래서 람다 대신 이 메서드의 참조를 전달하면 더 보기 좋게 결과를 얻을 수 있다.

map.merge(key, 1, Integer::sum);
  • 람다로 할 수 없는 일이라면 메서드 참조로도 할 수 없다.
  • 보통은 메서드 참조가 더 간결하지만, 상황마다 다르다.
//메서드 참조
service.execute(GoshThisClassNameIsHumongous::action);

// 람다를 사용하는 경우 -> 더 간결
service.execute(() -> action());

 

 

메서드 참조 유형 5가지

메서드 참조 유형 같은 기능을 하는 람다
정적 Integer::parseInt str→Integer.parseInt(str)
한정적(인스턴스) Instant.now()::isAfter Instant then = Instant.now();
t→then.isAfter(t)
비한정적(인스턴스) String::toLowerCase str→str.toLowerCase()
클래스 생성자 TreeMap<K,V>::new ()→new TreeMap<K,V>()
배열 생성자 int[]::new len→new int[len]

 

 

 

람다로는 불가능하고 메서드 참조로만 가능한 유일한 예

제네릭 함수 타입 구현이 유일한 예다.

함수형 인터페이스의 추상 메서드가 제네릭일 수 있듯이 함수 타입도 제네릭일 수 있다.

함수형 인터페이스를 위한 제네릭 함수 타입은 메서드 참조 표현식으로는 구현할 수 있지만, 람다식으로는 불가능

→ 제네릭 람다식이라는 문법이 없다.

 

 

결론

메서드 참조쪽이 짧고 명확하다면 메서드 참조를 쓰고 그렇지 않을때만 람다를 사용해라.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday