Java 8 함수형 인터페이스 마스터하기: 종합 가이드
함수형 인터페이스는 단일 기능을 나타냅니다. 예를 들어, 단일 메서드 compareTo를 가진 Comparable 인터페이스는 비교 목적으로 사용됩니다. Java 8은 람다 표현식에서 광범위하게 사용하기 위해 많은 함수형 인터페이스를 정의했습니다. java.util.function 패키지에 정의된 인터페이스 목록:
| 번호 |
인터페이스 및 설명 |
| 1 | BiConsumer<T,U> - 두 입력 인자를 받고 결과를 반환하지 않는 연산 표현 |
| 2 | BiFunction<T,U,R> - 두 인자를 받아 결과를 생성하는 함수 표현 |
| 3 | BinaryOperator<T> - 같은 타입의 두 피연산자 연산, 피연산자와 같은 타입 결과 생성 |
| 4 | BiPredicate<T,U> - 두 인자의 프레디케이트(불리언 값 함수) 표현 |
| 5 | BooleanSupplier - 불리언 값 결과 공급자 |
| 6 | Consumer<T> - 단일 입력 인자 받고 결과 반환하지 않는 연산 |
| 7 | DoubleBinaryOperator - 두 double 피연산자 연산, double 결과 생성 |
| 8 | DoubleConsumer - 단일 double 인자 받고 결과 반환하지 않는 연산 |
| 9 | DoubleFunction<R> - double 인자 받아 결과 생성하는 함수 |
| 10 | DoublePredicate - 단일 double 인자의 프레디케이트 |
| 11 | DoubleSupplier - double 값 결과 공급자 |
| 12 | DoubleToIntFunction - double 인자 받아 int 결과 생성 |
| 13 | DoubleToLongFunction - double 인자 받아 long 결과 생성 |
| 14 | DoubleUnaryOperator - 단일 double 피연산자 연산, double 결과 생성 |
| 15 | Function<T,R> - 한 인자 받아 결과 생성하는 함수 |
| 16 | IntBinaryOperator - 두 int 피연산자 연산, int 결과 생성 |
| 17 | IntConsumer - 단일 int 인자 받고 결과 반환하지 않는 연산 |
| 18 | IntFunction<R> - int 인자 받아 결과 생성하는 함수 |
| 19 | IntPredicate - 단일 int 인자의 프레디케이트 |
| 20 | IntSupplier - int 값 결과 공급자 |
| 21 | IntToDoubleFunction - int 인자 받아 double 결과 생성 |
| 22 | IntToLongFunction - int 인자 받아 long 결과 생성 |
| 23 | IntUnaryOperator - 단일 int 피연산자 연산, int 결과 생성 |
| 24 | LongBinaryOperator - 두 long 피연산자 연산, long 결과 생성 |
| 25 | LongConsumer - 단일 long 인자 받고 결과 반환하지 않는 연산 |
| 26 | LongFunction<R> - long 인자 받아 결과 생성하는 함수 |
| 27 | LongPredicate - 단일 long 인자의 프레디케이트 |
| 28 | LongSupplier - long 값 결과 공급자 |
| 29 | LongToDoubleFunction - long 인자 받아 double 결과 생성 |
| 30 | LongToIntFunction - long 인자 받아 int 결과 생성 |
| 31 | LongUnaryOperator - 단일 long 피연산자 연산, long 결과 생성 |
| 32 | ObjDoubleConsumer<T> - 객체값과 double 인자 받고 결과 반환하지 않는 연산 |
| 33 | ObjIntConsumer<T> - 객체값과 int 인자 받고 결과 반환하지 않는 연산 |
| 34 | ObjLongConsumer<T> - 객체값과 long 인자 받고 결과 반환하지 않는 연산 |
| 35 | Predicate<T> - 단일 인자의 프레디케이트(불리언 값 함수) |
| 36 | Supplier<T> - 결과 공급자 |
| 37 | ToDoubleBiFunction<T,U> - 두 인자 받아 double 결과 생성 |
| 38 | ToDoubleFunction<T> - double 결과 생성하는 함수 |
| 39 | ToIntBiFunction<T,U> - 두 인자 받아 int 결과 생성 |
| 40 | ToIntFunction<T> - int 결과 생성하는 함수 |
| 41 | ToLongBiFunction<T,U> - 두 인자 받아 long 결과 생성 |
| 42 | ToLongFunction<T> - long 결과 생성하는 함수 |
| 43 | UnaryOperator<T> - 단일 피연산자 연산, 피연산자와 같은 타입 결과 생성 |
함수형 인터페이스 예제
Predicate<T> 인터페이스는 test(Object) 메서드로 불리언 값을 반환하는 함수형 인터페이스입니다. 이 인터페이스는 객체가 true 또는 false인지 테스트함을 의미합니다.
원하는 에디터로 다음 Java 프로그램 생성 (예: C:\JAVA).
Java8Tester.java
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String args[]) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Predicate<Integer> predicate = n -> true
// n은 Predicate 인터페이스의 test 메서드에 매개변수로 전달
// test 메서드는 n 값에 관계없이 항상 true 반환
System.out.println("모든 숫자 출력:");
eval(list, n -> true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// test 메서드는 n%2가 0이면 true 반환
System.out.println("짝수 출력:");
eval(list, n -> n % 2 == 0);
// Predicate<Integer> predicate2 = n -> n > 3
// test 메서드는 n이 3보다 크면 true 반환
System.out.println("3보다 큰 숫자 출력:");
eval(list, n -> n > 3);
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if (predicate.test(n)) {
System.out.println(n + " ");
}
}
}
}
여기서 단일 입력을 받아 불리언을 반환하는 Predicate 인터페이스를 전달했습니다.
결과 검증
javac 컴파일러로 클래스 컴파일:
C:\JAVA> javac Java8Tester.java
Java8Tester 실행:
C:\JAVA> java Java8Tester
다음 출력 생성:
Print all numbers: 1 2 3 4 5 6 7 8 9
Print even numbers: 2 4 6 8
Print numbers greater than 3: 4 5 6 7 8 9