자바의 함수형 인터페이스(Functional Interface)는 딱 하나의 추상 메서드를 가진 인터페이스를 말합니다. 이러한 인터페이스는 람다식과 함께 자주 사용되며, 함수형 프로그래밍을 지원하는 중요한 개념 중 하나입니다.
함수형 인터페이스의 특징
1. 하나의 추상 메서드: 함수형 인터페이스는 정확히 하나의 추상 메서드를 가져야 합니다. 하나의 메서드를 가지는 것이 함수형 프로그래밍의 핵심이며, 이를 통해 람다식이 사용될 수 있습니다.
2. @FunctionalInterface 애너테이션: 함수형 인터페이스를 선언할 때 @FunctionalInterface 애너테이션을 사용하면 해당 인터페이스가 함수형 인터페이스임을 명시적으로 표현할 수 있습니다. 이 애너테이션은 필수는 아니지만, 문서화와 같은 목적으로 사용됩니다.
자주 사용되는 함수형 인터페이스
1. Runnable
@FunctionalInterface
public interface Runnable {
void run();
}
2. Callable<V>
@FunctionalInterface
public interface Callable<V> {
V call() throws Exception;
}
3. Comparator<T>
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
4. Supplier<T>
@FunctionalInterface
public interface Supplier<T> {
T get();
}
5. Consumer<T>
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
6. Function<T, R>
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
7. Predicate<T>
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
사용 예제
1. 람다식을 사용한 Runnable 구현
Runnable myRunnable = () -> System.out.println("Hello, Functional Interface!");
2. Comparator를 이용한 정렬
List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");
// 람다식을 이용한 Comparator 구현
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
3. Function을 이용한 데이터 변환
Function<String, Integer> stringLength = s -> s.length();
int length = stringLength.apply("Hello, World!"); // 13
4. Predicate를 이용한 데이터 필터링
List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");
// 람다식을 이용한 Predicate 구현
List<String> filteredNames = names.stream()
.filter(s -> s.startsWith("A"))
.collect(Collectors.toList());
함수형 인터페이스와 람다식을 사용하면 코드가 간결해지고 가독성이 좋아지며, 함수형 프로그래밍의 장점을 살릴 수 있습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 Function의 합성 (0) | 2023.11.22 |
---|---|
자바 java.util.function패키지 (0) | 2023.11.22 |
자바 람다식 작성하기 (0) | 2023.11.22 |
자바 람다식 (0) | 2023.11.22 |
자바 쓰레드 fork 프레임웍 (0) | 2023.11.22 |