// 익명 함수
MyInterface myInterface = new MyInterface() {
@Override
public void eat() {
System.out.println("hello");
System.out.println("eating..");
}
};
위와 아래의 코드는 같은 코드이다.
// 람다식
MyInterface myInterface = () -> {
System.out.println("hello");
System.out.println("eating..");
};
람다식은 매개변수, 리턴 타입, 변수로 만들 수 있다.
람다식을 다루기 위한 인터페이스로. 추상 메소드가 정확히 하나만 있는 인터페이스이다. 자바 API의 Comparator
, Runnable
등이 함수형 인터페이스이다.
추상 메소드가 하나만 정의되어 있어야 람다식과 인터페이스의 메소드가 1대1로 연결될 수 있기 때문이다.(static 메소드와 default 메소드는 개수 제한 없음. 디폴트 메서드를 가지고 있더라도 추상 메서드가 하나만 존재한다면 함수형 인터페이스이다.)
@FunctionalInterface
public interface MyInterface {
void eat(); // abstract 생략 되어 있음. 딱 하나만 존재해야함
static void printName(String name) {
System.out.println(name);
}
default void printHello() {
System.out.println("hello");
}
}