일반 메서드
int sum(int x, int y) {
return x + y;
}
람다 표현식
(x, y) -> x + y;
다음과 같이 @FunctionalInterface 어노테이션을 사용하여 함수형 인터페이스임을 명시할 수 있다. 이 어노테이션을 사용하면 부적절한 메서드를 추가하거나 다른 인터페이스를 상속받으면 컴파일 에러가 발생한다. Sum 함수를 함수형 인터페이스로 만들 수 있다.
@FunctionalInterface
public interface Sum {
int intSum(int x, int y);
}
그러면 아래와 같이 람다식으로 사용이 가능하다.
import ...Sum;
public class Main {
Sum sum = (a, b) -> a + b;
System.out.println(sum.intSum(1, 2));
}
물론 intSum은 추상 메서드이기 때문에 아래와 같이 마음대로 구현할 수 있다.
import ...Sum;
public class Main {
Sum sum = (a, b) -> a - b;
System.out.println(sum.intSum(1, 2));
}
구현하고자 하는 람다식이 이미 구현되어 있는 경우가 있다. 이 구현되어 있는 메서드를 아래와 같이 사용할 수 있는데 이 방식을 메서드 레퍼런스라 한다.
import ...Sum;
public class Main {
Sum sum = Integer::sum;
System.out.println(sum.intSum(1, 2));
}