[Effective Java] 7 - item43 람다보다는 메서드 참조를 사용하자.
메서드 참조와 람다
자바의 메서드 참조 (method reference)를 사용하면, 함수 객체를 람다보다도 더 간결하게 만들 수 있다.
다음은 정렬을 위한 비교 함수를 각기 람다와 메서드 참조 방식으로 구현한 예시이다.
Collections.sort(words,
(s1, s2) -> Integer.compare(s1.length(), s2.length()));
Collections.sort(words, comparingInt(String::length));
위와 같이, 대부분의 경우 람다식보다 메서드 참조를 사용할 때 더 짧고 명확하게 구현할 수 있다.
람다를 사용하면 좋은 경우
간혹 람다를 사용하는 것이 더 간결한 경우가 있는데, 주로 메서드와 람다가 같은 클래스에 위치하는 경우 그렇다.
service.execute(GoshThisClassNameIsHumongous::action); // 메서드 참조
service.execute(() -> action()); // 람다
위 코드는 람다를 사용하면 더 좋은 경우의 예시이다.
메서드 참조 유형
메서드 참조 유형 | 예시 | 람다식 |
---|---|---|
정적 | 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] |
Leave a comment