이름은 존재하지 않고 1급 객체
익명으로 사용되지만 메서드와 같은 특성은 가지고 있어서 코드를 간결하게 할수있다는 장점이 있다.
일반 표현식
Comparator<Student> byHeight= new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.getHeight() - s1.getHeight();
}
};
람다 표현식
Comparator<Student> byHeight = (Student s1, Student s2) -> s2.getHeight() - s1.getHeight();
함수형 인터페이스(Functional Interface) 란 하나의 추상메서드를 지정하는 인터페이스. Java 의 기본 함수형 인터페이스의 예시로 Runnable
, Callable
, Comparator
등이 있다.
한개만 존재하는 추상메서드는 SAM(Single Abstract Method) 라고 부르기도 한다.
<aside> 💡 함수형 인터페이스를 사용할때는 @FunctionalInterface 어노테이션을 사용하는것을 권장하고 있다. 어노테이션 표시는 인터페이스의 목적을 명확하게 보여주며 어노테이션 되있는 인터페이스가 조건을 충족하지 못할때 컴파일러가 에러를 발생시켜주기 때문이다.
</aside>
<aside> 💡 람다표현식(Lambda Expression) 과 함수형 인터페이스(Functional Interface)의 관계
람다 표현식은 함수형 인터페이스를 인자로 받는 메서드에만 사용할수 있다. 컴파일러에서는 프로그램 실행시 함수형 인터페이스에 단 하나의 추상메서드만 있는지 검사를 하고 두개 이상의 추상메서드가 있다면 에러가 발생한다.
</aside>