Skip to content

Latest commit

 

History

History
63 lines (42 loc) · 1.99 KB

43_람다보다는_메서드참조를_사용하라.md

File metadata and controls

63 lines (42 loc) · 1.99 KB

아이템 43. 람다보다는 메서드 참조를 사용하라

메서드 참조

개선전

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

개선후

map.merge(s, 1, Integer::sum);
  • 더 간단하고 명료해진다.

메서드 참조 유형

메서드 참조유형 같은 기능을 하는 람다
정적 Integer::parseInt str -> Integer.parseInt(str)
한정적(인스턴스) Instance.now()::isAfter Instance 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]

정적

가장 흔한 유형

한정적(인스턴스)

  • 수신객체를 특정하는 한정적(bound) 인스턴스 메서드 참조이다.
  • 정적 참조와 비슷
  • 함수 객체가 받는 인수와 참조되는 메서드가 받는 인수가 똑같다.

비한정적(인스턴스)

  • 수신객체를 특정하지 않는 비한정적(unbound) 인스턴스 메서드.
  • 함수객체를 적용하는 시점에 수신객체를 알려준다.
  • 수신객체 전달용 매개변수가 매개변수 목록의 첫번째로 추가되며,그 뒤로는 참조되는 메서드 선언에 정의된 매개변수들이 따라옴.
  • 주로 스트림 파이프라인에서 매핑과 필터함수에 쓰인다.
클래스 및 배열 생성자
  • 생성자를 가리키는 메서드 참조와 배열 생성자를 가리키는 메서드 참조.
  • 생성자 참조는 팩터리 객체로 사용된다.

결론

  • 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰자.
  • 그렇지 않을때만 람다를 사용하라.
    • 매개변수 이름 자체가 좋은 가이드가 될 수도 (이런경우 더 읽기 쉬움)
  • 참고 >
  • 람다로는 불가능하나 메서드 참조로는 가능한 유일한 예는 제네릭 함수 타입 구현이다.