본문 바로가기

Programming/JAVA

람다식(5) - 메서드 참조 1 : 메서드 참조의 개념

JAVA logo image

 

 

 

메서드 참조(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;

 

메서드 참조 방식은 정적 메서드, 그리고 인스턴스 메서드를 참조할 수 있습니다. 그리고 생성자 참조도 가능한데 각각의 케이스는 하나씩 살펴보도록 하겠습니다.