728x90
SMALL
안녕하세요 남갯입니다
오늘은 item43. 람다보다는 메소드 참조를 이용하라. 에 대해 포스팅 해보려고 합니다.
메소드 참조를 이용하라.
람다가 익명클래스보다 나은점은 간결함이다. 람다보다도 더 간결하게 만드는 방법이 있는데, 그것이 바로 메소드 참조이다.
//java 8 map안에 추가된 merge
//before
map.merge(key, 1, (count, incr) -> count + incr);
//after
map.merge(key, 1, Integer::sum);
키와 값 함수를 인수로 받으면서 {키,값} 쌍을 저장한다. 하지만 이런 코드도 거추장 스러운 부분이 남아있다.
count와 incr이 하는일이 없이 공간을 많이 차지한다.
Java 8부터는 Integer 클래스는 람다와 기능이 같은 정적 메서드 sum을 제공하기 시작했다. 따라서 람다 대신에 이 메서드의 참조를 전달하면 똑같은 결과를 얻을 수 있다.
매개변수 수가 증가할 수록 참조를 제거가능한 양도 증가한다.
람다가 무조건 좋은 가이드인것은 아니다. 매개변수의 이름 자체가 프로그래머의 좋은 가이드가 되기도 할때에는 메소드 참조보다 가독성도 좋고 유지보수도 쉬울 수 있다. 즉 람다로도 못한다면 메소드참조로도 할 수 없다.
람다가 메소드 참조보다 간결한 경우.
주로 메서드와 람다가 같은 클래스에 있을때 그렇다.
예를들어 아래의 함수들이 GoshThisClassnameisHumongous 클래스안에 있다고 했을 때,
class GoshThisClassnameIsHumongous{
//before
service.execute(GoshThisClassnameIsHumongous::action);
//after
service.execute(() -> action());
}
메소드의 참조가 더 짧지도 명확하지도 않으므로 람다가 낫다.
결론
메서드 참조는 람다의 간단명료한 대안이 될수 있는데, 메소드참조쪽이 짧고 명확하다면 메소드 참조를 쓰고 아니면 람다를 써라.
728x90
LIST
'책 > 이펙티브자바 3E' 카테고리의 다른 글
[Effective Java] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. (0) | 2020.01.14 |
---|---|
[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 (0) | 2020.01.06 |
[Effective Java] 아이템 42. 익명클래스 보다는 람다를 사용하라. (0) | 2019.12.31 |
[Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라. (0) | 2019.12.30 |
[Effective Java] 아이템 6. 불필요한 객체 생성을 피하라. (0) | 2019.12.27 |