티스토리 뷰
반응형
메서드 참조
람다가 익명클래스보다 간결하다.
그런데 자바에서 함수 객체를 람다보다 간결하게 만드는 방법이 메서드 참조이다.
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] |
람다로는 불가능하고 메서드 참조로만 가능한 유일한 예
제네릭 함수 타입 구현이 유일한 예다.
함수형 인터페이스의 추상 메서드가 제네릭일 수 있듯이 함수 타입도 제네릭일 수 있다.
함수형 인터페이스를 위한 제네릭 함수 타입은 메서드 참조 표현식으로는 구현할 수 있지만, 람다식으로는 불가능
→ 제네릭 람다식이라는 문법이 없다.
결론
메서드 참조쪽이 짧고 명확하다면 메서드 참조를 쓰고 그렇지 않을때만 람다를 사용해라.
반응형
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] 45. 스트림은 주의해서 사용하라 (0) | 2022.04.01 |
---|---|
[Effective Java] 44.표준 함수형 인터페이스를 사용하라 (0) | 2022.04.01 |
[Effective Java] 42.익명 클래스보다는 람다를 사용하라 (0) | 2022.03.31 |
[Effective Java] 41.정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 (0) | 2022.03.31 |
[Effective Java] 40.@Override 애너테이션을 일관되게 사용하라 (0) | 2022.03.31 |
댓글