람다식은 자바 8버전부터 추가되었다.
람다식이 추가되며 자바는 이제 함수형 언어의 특성도 갖게 되었다.
람다식이 무엇일까?
public int max(int a, int b){
return a > b ? a : b;
}
두 정수형 파라미터의 최댓값을 반환하는 메서드다.
이를 람다식으로 바꾸는 과정은 아래와 같다.
(int a, int b) -> {
return a > b ? a : b;
}
(a , b) -> {
return a > b ? a : b;
}
//람다식
(a , b) -> {a > b ? a : b};
한눈에 봐도 알아보기 쉽고 간결해졌다.
그런데 그냥 이렇게만 선언하면 되는 것일까?
그러면 어떻게 호출해야할까
함수형 인터페이스는 추상 메서드를 하나만 갖고있다.
람다식은 익명클래스의 객체와 동등한 존재이기 때문에
함수형 인터페이스를 구현해 그 참조값을 이용해 호출하면 된다.
방법은 아래와 같다.
interface MyInterface{
int max(int a, int b);
}
만약 위의 인터페이스를 익명클래스로 구현한다면 이렇게 된다.
MyInterface f1 = new MyInterface(){
@Override
int max(int a, int b){
return a > b ? a : b;
}
}
f1.max(10,20); // 20
람다식으로 하면 훨씬 간결해진다.
MyInterface f1 = (a , b) -> {a < b ? a : b};
f1.max(10,20); // 20
파라미터 타입이 추론 가능할때는 위처럼 생략할 수 있다.
대부분의 경우에 가능하다.