item 43) 람다보다는 메서드 참조를 사용하라

메서드 참조

  • 함수 객체를 람다보다 간결하게 만든다.

  • 아래는 merge 메서드에서 람다를 사용하는 코드와 정적 메서드 sum을 사용해 메서드 참조를 하는 코드이다.

map.merge(키, 값, 함수): 키가 맵 안에 없다면 (키, 값)을 저장하고, 키가 맵 안에 있다면 기존 값과 입력된 값에 (함수)를 적용한 후 (키, 함수 적용된 값)을 덮어쓴다.

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

메서드 참조를 통해 간결한 코드가 되었다.

map.merge(2, 1, Integer::sum);
  • 메서드 참조를 사용하는 것이 보통 더 짧고 간결하다.

  • 메서드와 람다가 같은 클래스에 있는 경우나 클래스/메서드 네임이 너무 길 경우 람다가 더 간결하다.

  • 람다로는 제네릭 함수 타입 구현을 표현할 수 없다. 메서드 참조로만 가능하다.

메서드 참조 유형

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

  • 한정적 인스턴스 메서드 참조: 수신 객체(참조 대상 인스턴스)를 특정한다.

  • 비한정적 인스턴스 메서드 참조: 수신 객체를 특정하지 않는다.

Last updated