함수형 인터페이스란?
함수형 인터페이스(Functional Interface)는 Java8에서 도입된 개념으로, 오직 하나의 추상 메서드만을 가지는 인터페이스이다. 이러한 인터페이스는 람다 표현식을 사용하여 인스턴스화할 수 있으며, 이는 코드를 더 간결하고 명확하게 만들어 준다.
함수형 인터페이스의 특징
함수형 인터페이스는 정확히 하나의 추상 메서드를 가져야 한다. 이는 인터페이스의 function signature를 정의한다.
Java8에서는 함수형 인터페이스를 정의할 때 FunctionalInterface 어노테이션을 사용할 수 있다. 이 어노테이션은 선택적이지만, 컴파일러에게 해당 인터페이스가 함수형인터페이스임을 명시하고, 만약 둘 이상의 추상 메서드가 선언되어 있다면 컴파일 오류를 발생시킨다.
함수형 인터페이스는 하나의 추상 메서드만 요구하지만, default 또는 static 키워드를 사용하여 구현된 메서드를 가질 수 있다. 이 메서드들은 함수형 인터페이스의 함수 서명에 영향을 주지 않는다.
함수형 인터페이스의 예시
Java의 java.util.function 패키지는 다양한 함수형 인터페이스를 제공한다.
Predicate< T > : 한 개의 인수를 받고 boolean을 리턴하는 메서드 boolean test(T t) 를 가진다.
Consumer< T > : 한 개의 인수를 받고 리턴 값이 없는 메서드 void accept(T t)를 가진다.
Function<T,R> : 한 개의 인수를 받고 결과를 리턴하는 메서드 R apply(T t)를 가진다.
UnaryOperator< T > : 한 개의 인수를 받고 동일한 타입의 결과를 리턴하는 메서드 T apply(T t)를 가진다. Function<T,R>의 특별한 형태이다.
@FunctionalInterface
public interface Greeting {
String sayHello(String name);
}
// 함수형 인터페이스를 사용하여 람다 표현식을 할당
Greeting greeting = name -> "Hello, " + name;
// 람다 표현식을 통해 메서드 호출
System.out.println(greeting.sayHello("World")); // "Hello, World" 출력
위 예시에서 Greeting은 함수형 인터페이스로, sayHello라는 단 하나의 추상 메서드를 가지고 있다. 람다 표현식을 사용하여 이 인터페이스의 인스턴스를 만들고, sayHello 메서드를 호출할 수 있다.