함수형 인터페이스는 단 하나의 추상 메소드만이 선언된 인터페이스이다.
SAM(Single Abstract Method) 인터페이스라고도 한다.
함수형 인터페이스와 람다를 이용하면 구조적으로 유연하고 간결한 코드를 작성할 수 있다. 인터페이스에 @FunctionalInterface 어노테이션을 붙여주면 컴파일에러를 방지할 수 있다.
예시 1)
public interface WelcomeSomething {
String hello(String name); // 추상메소드
static void printName(){
System.out.println("GRYOH");
}
}
예시2)
@FunctionalInterface
public interface WelcomeSomething {
String hello(String name); // 추상메소드
}
예시1과 같이 일반 메소드는 작성 가능하다
예시1과 예시2 방법 모두 가능하지만 예시2를 권고한다.
(@FunctionalInterface 어노테이션 추가 후 추상메소드 추가하면 컴파일 에러 발생하는 것을 확인 할 수 있다)
예시 3)
함수형 인터페이스가 아니다 -> 추상메소드는 한 개만 존재해야한다
컴파일 에러는 발생하지 않지만 함수형 인터페이스를 사용하는 쪽에서 multiple non-overriding abstract methods found in interface xxx 컴파일 에러 발생
@FunctionalInterface
public interface WelcomeSomething {
String hello(String name); // 추상메소드1
void doit(); // 추상메소드2
static void printName(){
System.out.println("GRYOH");
}
}
public static void main(String[] args) {
WelcomeSomething welcomeSomething3 = (name) -> { return name; }; //컴파일 에러