: 메서드를 하나의 식으로 표현한 것
함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다.
메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지기 때문에 람다식을 '익명 함수'라고도 한다.
❓ 함수형 인터페이스
: 람다식을 다루기 위한 인터페이스
람다식과 1:1 연결을 위해 추상메소드는 하나만 정의되어야한다.
@FunctionalInterface
public interface MyNumber {
int getMax(int num1, int num2);
}
// 함수형 인터페이스에서 메서드는 하나만 정의되어야하기때문에
// int getMin(int num1, int num2); 한줄이 추가되면 에러가 난다.
꼴은 () -> {} 형태
모든 메서드는 클래스를 새로 만들어야하고 객체도 생성해야 메서드를 호출할 수 있지만 람다식은 람다식 자체만으로도 이 메서드의 역할을 대신할 수 있다.
= 람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해졌다.
두 값 중 큰 값을 반환하는 메서드 max를 람다식으로 변환하자면,
메서드에서 이름과 반환타입을 제거한 다음 매개변수 선언부와 몸통 {} 사이에 -> 연산자를 추가한다.
int max(int a, int b) {
return a > b ? a : b;
}
(int a, int b) -> {
return a > b ? a : b;
}
반환값이 있는 메서드의 경우 return문을 식으로 대신하여 식의 연산 결과가 자동으로 반환값이 된다.
(int a, int b) -> a > b ? a : b
이때는 문장이 아닌 '식'이므로 끝에 ;를 붙이지 않도록 주의한다.
//람다식 사용
MyNumber myNumber = (x, y) -> x > y ? x : y;
System.out.println(myNumber.getMax(10, 20));
위와같은 람다식 사용으로 클래스 선언을 거치지 않고 인스턴스 생성과 동시에 출력문이 수정되어 출력됨을 확인할 수 있다.
※ 주의 : 상황에 따른 {} () 괄호 생략과 ; 유무를 세심하게 주의하기