함수형 인터페이스란?
Java 8에서 추가된 기능으로 단 하나의 추상 메서드를 가지며, 람다 표현식이나 메서드 참조로 이를 구현할 수 있다. 람다 표현식과 스트림(Stream) API가 도입되면서 함수형 프로그래밍 스타일이 훨씬 더 쉽고 강력해졌으며, 함수형 인터페이스는 이를 지원하기 위한 핵심 요소입니다.
1. 함수형 인터페이스
1-1) 종류
인터페이스 | 설명 | 추상 메서드 |
Supplier<T> | 매개변수 없이 값을 제공하는 함수형 인터페이스 | T get() |
Consumer<T> | 매개변수를 받아서 값을 소비하는 함수형 인터페이스 | void accept(T t) |
BiConsumer<T, U> | 두 개의 매개변수를 받아서 값을 소비하는 함수형 인터페이스 | void accept(T t, U u) |
Predicate<T> | 매개변수를 받아서 논리적인 조건을 검사하는 함수형 인터페이스 | boolean test(T t) |
BiPredicate<T, U> | 두 개의 매개변수를 받아서 논리적인 조건을 검사하는 함수형 인터페이스 | boolean test(T t, U u) |
Function<T, R> | 매개변수를 받아서 결과를 반환하는 함수형 인터페이스 | R apply(T t) |
BiFunction<T, U, R> | 두 개의 매개변수를 받아서 결과를 반환하는 함수형 인터페이스 | R apply(T t, U u) |
UnaryOperator<T> | 하나의 매개변수를 받아서 동일한 타입의 결과를 반환하는 함수형 인터페이스 | T apply(T t) |
BinaryOperator<T> | 두 개의 매개변수를 받아서 동일한 타입의 결과를 반환하는 함수형 인터페이스 | T apply(T t1, T t2) |
Runnable | 스레드를 실행하기 위한 함수형 인터페이스 | void run() |
1-2) 사용 방법
// 1) Supplier<T>
Supplier<String> supplier = () -> "Hello, World!";
String result = supplier.get();
System.out.println(result); // 출력: Hello, World!
// 2) Consumer<T>
Consumer<String> consumer = (str) -> System.out.println("소비: " + str);
consumer.accept("Hello"); // 출력: 소비: Hello
// 3) Predicate<T>
Predicate<Integer> predicate = (num) -> num > 0;
boolean result = predicate.test(5);
System.out.println(result); // 출력: true
// 4) Function<T, R>
Function<Integer, String> function = (num) -> "결과: " + num;
String result = function.apply(10);
System.out.println(result); // 출력: 결과: 10
// 5) UnaryOperator<T>
UnaryOperator<Integer> operator = (num) -> num * num;
int result = operator.apply(5);
System.out.println(result); // 출력: 25
// 6) BiFunction<T, U, R>
BiFunction<Integer, Integer, Integer> biFunction = (num1, num2) -> num1 + num2;
int result = biFunction.apply(10, 20);
System.out.println(result); // 출력: 30
// 7) BiConsumer<T, U>
BiConsumer<String, Integer> biConsumer = (str, num) -> System.out.println(str + ": " + num);
biConsumer.accept("Count", 10);
// 8) BiPredicate<T, U>
BiPredicate<Integer, Integer> biPredicate = (num1, num2) -> num1 > num2;
boolean result = biPredicate.test(10, 5);
System.out.println(result); // 출력: true
// 9) BinaryOperator<T>
BinaryOperator<Integer> binaryOperator = (num1, num2) -> num1 * num2;
int result = binaryOperator.apply(5, 6);
System.out.println(result); // 출력: 30
// 10) Runnable
Runnable runnable = () -> System.out.println("Hello, World!");
runnable.run(); // 출력: Hello, World!
2. 함수형 인터페이스 선언 방법
@FunctionalInterface
public interface MyFunctionalInterface {
void doSomething();
}
- 단 하나의 추상 메서드만을 가져야 한다.
- @FunctionalInterface 어노테이션은 선택사항이지만, 인터페이스가 함수형 인터페이스임을 명시적으로 나타내는 데 도움이 된다.
- 함수형 인터페이스는 람다 표현식, 메서드 참조 등을 사용하여 인스턴스를 생성할 수 있다.
반응형
'Java' 카테고리의 다른 글
[Java] Optional 클래스 개념 및 사용 방법 (0) | 2023.05.31 |
---|---|
[Java] 날짜 및 시간 API (Date and Time API) 사용 방법 (0) | 2023.05.30 |
[Java] 기본 메서드(Default Methods) 개념 및 사용 방법 (0) | 2023.05.25 |
[Java] 메서드 참조 사용 방법 (1) | 2023.05.24 |
[Java] 스트림(Stream) API 사용 방법 (0) | 2023.05.23 |