JAVA/Effective Java

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

IT-사과 2022. 7. 3. 18:37

람다는 익명 클래스보다 간결하다. 그런데 람다보다 더 간결한 방법이 있으니, 바로 메서드 참조(method reference)이다.

 

map.merge(key, 1, (count, incr) -> count + incr); // 람다 
map.merge(key, 1, Integer::sum); // 메서드 참조

매개변수의 수가 늘어날수록 메서드 참조로 제거할 수 있는 코드의 양도 늘어난다. 하지만, 항상 메서드 참조가 더 나은 방법은 아니다. 람다는 이름 자체가 프로그래머에게 가이드가 되기도 한다. 길이는 더 길지만 메서드 참조보다 읽기 쉽고 유지보수도 쉬울 수 있다.

 

람다로 할 수 없는 일이라면 메서드 참조로도 할 수 없다(애매한 예외를 제외한다면). 그렇더라도 람다로 구현했을 때 코드가 너무 길다면 메서드 참조가 보통은 더 짧고 간결하기 때문에 좋은 대안이 되어준다.

 

람다가 더 나은 경우

IDE들은 보통 람다를 메서드 참조로 대체하라고 권고하지만 모든 경우에 항상 이득이 되는 것은 아니다.

service.excute(GoshThisClassNameIsHumongous::action); // 메서드 참조
service.excute(() -> action()); // 람다

람다 식을 사용한 경우가 메서드 참조를 사용한 경우보다 명확하고 더 짧다.

 

메서드 참조의 유형

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

 

메서드 참조는 람다의 간단한 대안이 될 수 있다. 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때만 람다를 사용하라.

 


참조자료

www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LET&Kc=

 

이펙티브 자바 3/E - 교보문고

프로그래밍인사이트 | 자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브러리의 최신 기능을 십분 활용

www.kyobobook.co.kr