[Java] Java에서 기능적 인터페이스 사용

이 글은 학습 참고용입니다!

관련 튜토리얼 주소:

https://www.runoob.com/java/java8-functional-interfaces.html

https://www.cnblogs.com/dgwblog/p/11739500.html

https://www.developer.com/java/java-functional-interfaces/

여기에 이미지 설명 삽입

인터페이스는 일련의 메서드와 서명을 정의하는 계약입니다. 모든 클래스는 이 인터페이스를 확장하고 이 인터페이스의 메서드를 구현할 수 있습니다. Java 프로그래밍 언어는 언어의 초기 버전부터 인터페이스 지원을 제공했습니다.

기능적 인터페이스는 Java 언어 버전 8에 추가된 널리 사용되는 Java 기능입니다. 이를 통해 개발자는 재사용 가능한 코드를 만들고 개발 프로세스를 단순화할 수 있는 새로운 가능성을 열어주는 일급 개체로 함수를 만들 수 있습니다.

이 기사에서는 기능적 인터페이스, 작동 방식, 유용한 이유 및 개발자가 프로젝트에서 이를 사용할 수 있는 방법에 대한 몇 가지 예를 소개합니다.

Java의 기능적 인터페이스는 무엇입니까?

Java의 기능적 인터페이스는 하나의 추상 메서드(즉, 구현되지 않은 메서드)로만 구성된 인터페이스입니다. 이 메소드는 리턴 유형이 있어야 하지만 매개변수를 허용할 수 없습니다. 메서드는 또한 공용이어야 하며 액세스 가능한 클래스 또는 인터페이스에 있어야 합니다.

추상 메서드 외에도 Java의 기능 인터페이스에서 다음 메서드를 만들 수 있습니다.

  • 기본 방법
  • 정적 방법
  • Object 클래스에서 상속된 메서드

다음은 Java 기능 인터페이스의 간단한 코드 예입니다.

@FunctionalInterface 
public interface MyFunctionalInterface 
{
    
     
  void doSomething(); 
} 

보시다시피 인터페이스에는 하나의 추상 메서드만 있습니다.

Java에서 비교기 인터페이스를 작성하는 방법

기능 인터페이스의 일반적인 예는 두 개체를 비교하는 데 사용되는 Comparator 인터페이스입니다. 다음과 같은 추상 메서드가 있습니다.

int compare(T obj1, T obj2); 
Here's how the Comparer interface is defined in Java: 
@FunctionalInterface
public interface Comparator {
    
    
	int compare(T o1, T o2);
	boolean equals(Object obj);
	//其他方法...
}

Comparator 인터페이스를 사용하여 자연 순서 또는 정의한 사용자 지정 순서에 따라 개체 목록**을 정렬할 수 있습니다. 예를 들어, 프로그래머는 Comparator 인터페이스를 사용하여 문자열 목록을 길이별로 정렬할 수 있습니다.

List listStrings = Arrays.asList("ABC", "XYZ", "PQR"); 
listStrings.sort((s1, s2) -> s1.length() - s2.length());
System.out.println(listStrings);

목록의 순서를 바꿀 수도 있습니다.

listStrings.sort((s1, s2) -> s2.length() - s1.length());
System.out.println(listStrings);

Java의 @FunctionalInterface 주석

Java 8에서 주석 **@FunctionalInterface**는 인터페이스를 기능적 인터페이스로 표시합니다. 인터페이스에 둘 이상의 추상 메서드가 포함된 경우 이 주석을 사용하여 컴파일러 오류를 생성하도록 인터페이스를 표시할 수 있습니다. Java의 기능 인터페이스는 여러 기본 메서드를 가질 수 있는 람다 식에서 자주 사용됩니다.

**@FunctionalInterface 주석은 선택 사항입니다. 인터페이스에 추상 메서드가 포함되어 있지만 @FunctionalInterface로 주석이 지정되지 않은 경우 여전히 기능 인터페이스이며 람다 식의 대상 유형일 수 있습니다. 이 주석은 컴파일러가 오류를 표시하기 때문에 기능적 인터페이스를 비기능적 인터페이스로 실수로 수정하는 것을 방지합니다.

Java에서 기능적 인터페이스의 이점은 무엇입니까?

기능적 인터페이스 의 가장 주목할만한 이점은 여러 클래스가 코드를 복사하여 붙여넣지 않고 사용할 수 있는 추상화를 생성한다는 것입니다. 이는 개발자가 다양한 메서드 및 동작을 사용하여 복잡한 추상화를 만들어야 하는 경우에 특히 유용합니다.

Java에서는 기능 인터페이스를 사용하여 프로그래머가 참조 개체가 아닌 매개 변수로 함수를 전달할 수 있으므로 작성해야 하는 상용구 코드의 양이 줄어듭니다.

함수형 프로그래밍 에서 코드 조각은 데이터로 생각할 수 있습니다. 여기에서 람다 표현식이 작동합니다. 람다 식을 사용하여 다른 함수나 개체에 코드를 전달할 수 있습니다.

람다 식은 기능적 인터페이스를 데이터 유형으로 사용한다는 점에 유의해야 합니다 . 기능적 인터페이스에는 하나의 추상 메서드만 있기 때문에 해당 메서드의 구현은 다른 메서드에 인수로 전달될 수 있는 코드가 됩니다.

익명의 내부 클래스를 사용하여 기능적 인터페이스 구현

Java 8 이전에는 프로그래머가 다음 코드 샘플과 같이 익명의 내부 클래스 또는 객체를 사용하여 이러한 인터페이스를 구현했습니다.

class Test {
    
    
    public static void main(String args[])
    {
    
    
        new Thread(new Runnable() {
    
    
            @Override public void run()
            {
    
    
                System.out.println("Hello World!");
            }
        }).start();
    }
}

Java의 기본 제공 기능 인터페이스

ComparatorRunnable 인터페이스 외에도 Java 8에는 Callable , Predicate , FunctionConsumer 와 같은 다른 많은 내장 기능 인터페이스가 있습니다 . 이러한 인터페이스는 java.util.function 패키지 에서 찾을 수 있습니다 .

다음은 Java에서 가장 일반적으로 사용되는 내장 인터페이스에 대한 간략한 설명입니다.

  • Comparator : Comparator는 특정 기준에 따라 두 객체를 비교하는 데 사용되는 인터페이스입니다. java.util.Comparator 클래스는 이 인터페이스를 구현하는 데 사용됩니다.
  • Runnable : Runnable 인터페이스를 구현하고 실행 중인 스레드의 추상화를 제공하는 추상 클래스입니다 .
  • Callable : **call()** 메서드를 호출하여 액세스할 수 있는 단일 결과 값 T 를 반환하는 작업을 나타냅니다 .
  • Future : Future는 결과를 아직 사용할 수 없지만 결국 미래의 특정 시점(보류 중인 모든 활동이 성공적으로 완료되거나 실패했을 때)에 사용할 수 있게 되는 비동기 작업을 나타냅니다.
  • 공급업체 : 공급업체는 단순히 값을 반환하고 입력 매개변수를 사용하지 않는 함수이며 순수 함수 라고도 합니다 .
  • 술어 : 술어 기능 인터페이스는 부울 매개변수 유형 T 로 지정된 일부 조건에 대해 또는 거짓을 반환하는 술어를 나타냅니다.
  • 소비자 : 소비자 기능 인터페이스는 T 유형의 매개 변수를 받아들이고 결과를 반환하지 않는 함수를 나타냅니다 .

Java에서 사용자 정의 기능 인터페이스를 구현하는 방법

기능적 인터페이스는 두 가지 방법으로 만들 수 있습니다. **@FunctionalInterface 주석을 추가하여 기존 인터페이스를 기능적 인터페이스로 변환할 수 있습니다. 또는 프로그래머가 하나의 추상 메서드만 포함하는 인터페이스를 가질 수 있습니다. 다음 코드 샘플은 Java에서 기능 인터페이스를 정의하고 사용하는 방법에 대한 완전한 예입니다.**

@FunctionalInterface  
    interface Test{
    
      
        void display(String message);  
    }  
    public class TestImplementation implements Test{
    
      
        public void display(String message){
    
      
            System.out.println(message);  
        }  
        public static void main(String[] args) {
    
      
            TestImplementation obj = new TestImplementation();  
            obj.display("Hello World!");  
        }  
    }

Java 8에 도입된 람다 식은 이전 버전에 비해 새로운 구문 개선 사항을 제공하고 애플리케이션에서 상용구 코드를 제거하는 데 도움이 됩니다. 기능적 인터페이스는 Java의 일급 시민이며 해당 구현은 람다 식으로 생각할 수 있습니다. 기능적 인터페이스는 익명 내부 클래스의 장황함을 줄여 기능적 코드를 더 쉽게 작성할 수 있도록 합니다.

기능적 인터페이스는 코드에 유연성을 추가하는 좋은 방법입니다. 기능적 인터페이스를 사용하여 코더는 개체에서 필요한 기능을 정확히 지정한 다음 요구 사항을 충족하는 모든 클래스에서 해당 개체를 구현하도록 할 수 있습니다.

추천

출처blog.csdn.net/m0_47015897/article/details/131413303