메서드 참조(Method References)의 개념은, 메서드를 참조해서 파라미터의 정보와 리턴 타입을 알아낸 다음 람다식에서 불필요한 파라미터를 제거하는 것이 목적입니다. 즉, 생략할 수 있는 것은 생략한다는 의미죠.
예를 들어 살펴보겠습니다. Math 클래스의 max( )라는 정적 메서드는 두 개의 값을 받아 큰 수를 리턴하는 메서드입니다. 이를 람다식으로 표현하면 다음과 같습니다.
(left, right) -> Math.max(left, right);
지금 두 개의 파라미터 인자 값을 Math.max( ) 메서드의 파라미터로 단순히 전달만 하는 상황입니다. 단순한 상황이기 때문에, 아래와 같이 축약해서 표현할 수 있게 됩니다.
Math :: max;
위와 같은 방식을 '메서드 참조'라고 표현합니다. 그런데 딱 한 줄만으로는 사용법이 잘 와닿지 않습니다. 예를 들어서, 함수적 인터페이스 IntBinaryOperator를 사용한다고 가정해 보겠습니다.
이 IntBinaryOperator의 추상 메서드는 intApplyAsInt(int, int) 입니다. 통상적으로는 이 경우 구현 시 람다식을 사용하겠지만, 위의 메서드 참조를 활용한다면 아래 예제와 같이 적용할 수 있겠네요.
IntBinaryOperator operator = (x, y) -> Math.max(x, y);
// 메서드 참조
IntBinaryOperator operator = Math :: max;
메서드 참조 방식은 정적 메서드, 그리고 인스턴스 메서드를 참조할 수 있습니다. 그리고 생성자 참조도 가능한데 각각의 케이스는 하나씩 살펴보도록 하겠습니다.
'Programming > JAVA' 카테고리의 다른 글
람다식(5) - 메서드 참조 3 : 파라미터의 메서드 참조 (0) | 2023.09.13 |
---|---|
람다식(5) - 메서드 참조 2 : 정적 메서드, 인스턴스 메서드 참조 (0) | 2023.08.31 |
람다식(4) - 표준 API의 함수적 인터페이스 9 : minBy(), maxBy() 정적 메서드 (1) | 2023.08.28 |
람다식(4) - 표준 API의 함수적 인터페이스 8 : 디폴트 메서드 and(), or(), negate() 그리고 정적 메서드 isEqual() 2 (0) | 2023.08.17 |
람다식(4) - 표준 API의 함수적 인터페이스 8 : 디폴트 메서드 and(), or(), negate() 그리고 정적 메서드 isEqual() 1 (0) | 2023.08.04 |