함수형 인터페이스는 람다 표현식과 메서드 참조에 대한 타겟 타입을 제공하고 타겟 타입은 변수 할당, 메서드 호출, 타입 변환에 활용할 수 있다.
Function 인터페이스는 입력을 받아 출력으로 매핑하는 함수를 정의한다.
입력 타입 T와 출력 타입 R을 지정한다.
Function<Integer, String> intToString = (i) -> "Number: " + i;
System.out.println(intToString.apply(5)); // 출력: Number: 5
Supplier 인터페이스는 입력이 없고, 출력을 생성하는 함수를 정의한다.
출력 타입 T를 지정한다.
Supplier<Double> randomSupplier = () -> Math.random();
System.out.println(randomSupplier.get()); // 출력: 임의의 난수
Consumer 인터페이스는 입력을 받아 소비하는(처리하는) 함수를 정의한다.
반환값이 없다. 입력 타입 T를 지정한다.
Consumer<String> printConsumer = (s) -> System.out.println(s);
printConsumer.accept("Hello, World!"); // 출력: Hello, World!
Predicate 인터페이스는 입력을 받아 조건을 테스트하고 boolean 값을 반환하는 함수를 정의한다.
입력 타입 T를 지정한다.
Predicate<Integer> isEven = (i) -> i % 2 == 0;
System.out.println(isEven.test(4)); // 출력: true
System.out.println(isEven.test(5)); // 출력: false