람다는 이전에 배운 것으로 그 자체로 다른 메소드 안에서 매개변수로 참조될 수도 있다는 것을 알았습니다.
https://blue-dot.tistory.com/96
일부 람다식을 메소드 참조로 대신하게 하거나
기본적으로 람다식보다 조금 더 코드를 단순하게 하기 위해서 메소드 참조를 사용합니다.
메소드 참조method reference는 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 해당 람다 표현식에서 중복됨으로써 불필요한 매개변수를 생략하고 사용할 수 있게 해줍니다.
메소드 참고의 유형은 다음과 같습니다.
• static 메소드의 참조
• 참조변수를 통한 인스턴스 메소드 참조
• 클래스 이름을 통한 인스턴스 메소드 참조
• 생성자 참조
● 우선 static 메소드 참조를 살펴볼게요.
Collections 클래스의 reverse 메소드 기반 예제를 보겠습니다.
public static void reverse(List<?> list) // 저장 순서를 뒤집는다. (리버스한다.)
class ArrangeList {
public static void main(String[] args) {
List<Integer> ls = Arrays.asList(1, 3, 5, 7, 9);
ls = new ArrayList<>(ls);
Consumer<List<Integer>> c = l -> Collections.reverse(l); // reverse 메소드 호출 중심의 람다식
c.accept(ls); // 순서 뒤집기 진행
System.out.println(ls); // 출력
}
}
붉은색 글자로 표기된 부분에서 l 이라고 하는 인자가 중복이 됨을 알 수 있습니다.
여기에서 accept 메소드를 호출할 때 전달되는 인자가 reverse 메소드에서 호출하면서
그대로 전달된다는 것에 근거하여 ( 같은 l 인자 ) 다음과 같이 수정이 가능합니다.
수정 전 | Consumer<List<Integer>> c = l -> Collections.reverse(l); |
수정 후 | Consumer<List<Integer>> c = Collections : : reverse; |
즉 불필요하게 중복되는 매개변수를 제거하고 다음과 같이 ' :: ' 기호를 사용하여 표현합니다.
클래스이름::메소드이름
또는
참조변수이름::메소드이름
다음은 두 개의 값을 전달받아 제곱 연산을 수행하는 Math 클래스의 클래스 메소드 pow() 메소드를 호출하는 람다식입니다. 보다 더 간결하게 표현이 가능합니다.
수정 전 | (base, exponent) -> Math.pow(base, exponent); |
수정 후 | Math::pow; |
또한 인스턴스의 메소드를 참좋라 때에도 참조 변수의 이름을 통해 메소드를 참조할 수 있습니다.
MyClass obj = new MyClass;
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 51. 리덕션, 맵핑Mapping (Map, faltMap) (작성중) (0) | 2022.11.07 |
---|---|
자바 기초 공부 일지 50. 스트림Stream, 필터링과 맵핑 (0) | 2022.11.07 |
자바 기초 공부 일지 48. 함수형 인터페이스 Predicate<T>, Supplier<T>, Consumer<T>, Function<T, R> (2) | 2022.11.04 |
자바 기초 공부 일지 47. 람다와 함수형 인터페이스 (0) | 2022.11.04 |
자바 기초 공부 일지 46. 람다lambda (0) | 2022.11.03 |