정확히 하나의 추상 메소드를 포함하는 인터페이스를 기능적 인터페이스라고 합니다. 기본 정적 메서드는 여러 개 가질 수 있지만 추상 메서드는 하나만 포함할 수 있습니다. 객체 클래스의 메소드를 선언할 수도 있습니다.
기능적 인터페이스는 단일 추상 메소드 인터페이스 또는 SAM 인터페이스라고도 합니다. 이는 함수형 프로그래밍 접근 방식을 달성하는 데 도움이 되는 Java의 새로운 기능입니다.
실시예 1
@FunctionalInterface interface sayable{ void say(String msg); } public class FunctionalInterfaceExample implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample fie = new FunctionalInterfaceExample(); fie.say('Hello there'); } }지금 테스트해보세요
산출:
Hello there
기능적 인터페이스는 객체 클래스의 메소드를 가질 수 있습니다. 다음 예를 참조하세요.
실시예 2
@FunctionalInterface interface sayable{ void say(String msg); // abstract method // It can contain any number of Object class methods. int hashCode(); String toString(); boolean equals(Object obj); } public class FunctionalInterfaceExample2 implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2(); fie.say('Hello there'); } }지금 테스트해보세요
산출:
Hello there
잘못된 기능 인터페이스
기능적 인터페이스는 추상 메서드가 없는 경우에만 다른 인터페이스를 확장할 수 있습니다.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
산출:
compile-time error
실시예 3
다음 예에서는 기능적 인터페이스가 비기능적 인터페이스로 확장됩니다.
interface Doable{ default void doIt(){ System.out.println('Do it now'); } } @FunctionalInterface interface Sayable extends Doable{ void say(String msg); // abstract method } public class FunctionalInterfaceExample3 implements Sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3(); fie.say('Hello there'); fie.doIt(); } }지금 테스트해보세요
산출:
Hello there Do it now
Java 사전 정의 기능 인터페이스
Java는 람다 및 메서드 참조를 사용하여 함수형 프로그래밍을 처리하기 위해 미리 정의된 함수형 인터페이스를 제공합니다.
자신만의 사용자 정의 기능 인터페이스를 정의할 수도 있습니다. 다음은 java.util.function 패키지에 포함된 기능적 인터페이스 목록입니다.
상호 작용 | 설명 |
---|---|
이중소비자 | 이는 두 개의 입력 인수를 받아들이고 결과를 반환하지 않는 연산을 나타냅니다. |
소비자 | 이는 단일 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다. |
기능 | 하나의 인수를 받아들이고 결과를 반환하는 함수를 나타냅니다. |
술부 | 이는 하나의 인수에 대한 조건자(부울 값 함수)를 나타냅니다. |
이중 기능 | 두 개의 인수를 받아들이고 결과를 반환하는 함수를 나타냅니다. |
바이너리연산자 | 이는 동일한 데이터 유형의 두 피연산자에 대한 연산을 나타냅니다. 피연산자와 동일한 유형의 결과를 반환합니다. |
이중 예측 | 이는 두 인수의 조건자(부울 값 함수)를 나타냅니다. |
부울 공급업체 | 부울 값 결과의 공급자를 나타냅니다. |
DoubleBinary연산자 | 두 개의 double 유형 피연산자에 대한 연산을 나타내며 double 유형 값을 반환합니다. |
DoubleConsumer | 이는 단일 double 유형 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다. |
DoubleFunction | 이는 double 유형 인수를 받아들이고 결과를 생성하는 함수를 나타냅니다. |
DoublePredicate | 이는 하나의 double 유형 인수의 조건자(부울 값 함수)를 나타냅니다. |
이중 공급업체 | 이중 유형 결과의 공급자를 나타냅니다. |
DoubleToInt함수 | 이는 double 유형 인수를 받아들이고 int 유형 결과를 생성하는 함수를 나타냅니다. |
DoubleToLong 함수 | 이는 double 유형 인수를 허용하고 Long 유형 결과를 생성하는 함수를 나타냅니다. |
DoubleUnaryOperator | 이는 double 유형 결과를 생성하는 단일 double 유형 피연산자에 대한 연산을 나타냅니다. |
IntBinary연산자 | 두 개의 int 유형 피연산자에 대한 연산을 나타내고 int 유형 결과를 반환합니다. |
내부소비자 | 이는 단일 정수 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다. |
Int함수 | 정수 인수를 받아들이고 결과를 반환하는 함수를 나타냅니다. |
IntPredicate | 이는 하나의 정수 인수에 대한 조건자(부울 값 함수)를 나타냅니다. |
내부공급자 | 정수형의 공급자를 나타냅니다. |
IntToDouble함수 | 이는 정수 인수를 받아들이고 double을 반환하는 함수를 나타냅니다. |
IntToLong 함수 | 정수 인수를 받아들이고 long을 반환하는 함수를 나타냅니다. |
IntUnaryOperator | 이는 정수 결과를 생성하는 단일 정수 피연산자에 대한 연산을 나타냅니다. |
LongBinary연산자 | 두 개의 긴 유형 피연산자에 대한 연산을 나타내고 긴 유형의 결과를 반환합니다. |
LongConsumer | 단일 긴 유형 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다. |
LongFunction | 긴 형식의 인수를 받아들이고 결과를 반환하는 함수를 나타냅니다. |
LongPredicate | 이는 하나의 긴 유형 인수의 조건자(부울 값 함수)를 나타냅니다. |
롱공급자 | 긴 유형의 결과 공급자를 나타냅니다. |
LongToDouble함수 | long 타입의 인자를 받아 double 타입의 결과를 반환하는 함수를 나타냅니다. |
LongToInt함수 | 이는 긴 유형의 인수를 받아들이고 정수 결과를 반환하는 함수를 나타냅니다. |
Long단항 연산자 | 이는 긴 유형 결과를 반환하는 단일 긴 유형 피연산자에 대한 연산을 나타냅니다. |
ObjDoubleConsumer | 이는 개체와 이중 인수를 허용하고 결과를 반환하지 않는 작업을 나타냅니다. |
ObjIntConsumer | 객체와 정수 인수를 허용하는 연산을 나타냅니다. 결과를 반환하지 않습니다. |
ObjLongConsumer | 이는 객체와 긴 인수를 허용하는 작업을 나타내며 결과를 반환하지 않습니다. |
공급자 | 이는 결과 공급업체를 나타냅니다. |
ToDoubleBi함수 | 이는 두 개의 인수를 받아들이고 double 유형 결과를 생성하는 함수를 나타냅니다. |
ToDouble함수 | double형 결과를 반환하는 함수를 나타냅니다. |
ToIntBi함수 | 이는 두 개의 인수를 받아들이고 정수를 반환하는 함수를 나타냅니다. |
ToInt함수 | 정수를 반환하는 함수를 나타냅니다. |
ToLongBi 함수 | 두 개의 인수를 받아 long 형식의 결과를 반환하는 함수를 나타냅니다. |
ToLong 함수 | long 타입의 결과를 반환하는 함수를 나타냅니다. |
단항 연산자 | 이는 피연산자와 동일한 유형의 결과를 반환하는 단일 피연산자에 대한 연산을 나타냅니다. |