@FunctionalInterface
애노테이션을 가지고 있는 인터페이스@FunctionalInterface
public interface RunSomething {
void doIt();
//void doItAgain();
static void printName(){
System.out.println("catsbi");
}
default void printAge(){
System.out.println("33");
}
}
⇒ 위 코드를 보면 printName()과 printAge 메소드도 있는데 함수형 인터페이스가 아닐까요? 답은 함수형 인터페이스(Functional Interface)가 맞다 입니다. 중요한건 static 메소드와 default메소드가 있는게아니라 추상 메소드
가 1개만 있어야 한다는 것입니다.
⇒@FunctionalInterface
함수형 인터페이스를 정의할일이 있을때는 인터페이스에 이 어노테이션을 붙혀주면 더 명시적으로 구분할 수 있고 함수형 인터페이스 규칙을 위반하면 컴파일시 에러가 발생하게 됩니다.
어노테이션의 원리는 이 링크를 통해 자세히 알 수 있습니다.
그렇다면 이 함수형 인터페이스를 어떻게 구현하여 사용할까요?
: 익명 내부 클래스를 만들어 사용.
public class Foo {
public static void main(String[] args) {
//익명 내부 클래스(anonymous inner class)
RunSomething runSomething = new RunSomething() {
@Override
public void doIt() {...}
};
}
}
람다표현식(Lambda Expressions)을 이용하여 간략하게 구현
public class Foo {
public static void main(String[] args) {
RunSomething runSomething = () -> System.out.println("Hello");
}
}