함수형 인터페이스는 단일 추상 메서드(Single Abstract Method, SAM)만을 가진 인터페이스로, 주로 람다식과 함께 사용됩니다. 자바 8부터 제공되는 표준 함수형 인터페이스는 java.util.function 패키지에 포함되어 있으며, 일반적인 데이터 변환, 필터링, 조건 검사 등의 작업에 사용됩니다.
java.util.function (Java SE 17 & JDK 17)
인터페이스 | 설명 | 메서드 | 사용 예 |
---|---|---|---|
Consumer<T> | 값을 소비 (반환값 없음) | accept(T t) | 출력 |
Supplier<T> | 값 공급 (매개변수 없음, T 반환) | get() | 값 생성 |
Predicate<T> | 조건 검사 (boolean 반환) | test(T t) | 필터링 조건 |
Function<T, R> | T 를 R 로 변환 | apply(T t) | 변환, 매핑 |
BiFunction<T, U, R> | 두 개의 입력을 R 로 변환 | apply(T t, U u) | 계산, 조합 |
UnaryOperator<T> | 동일 타입 변환 | apply(T t) | 변환, 매핑 |
BinaryOperator<T> | 동일 타입의 두 값을 결합 | apply(T t, T t2) | 연산 |
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.IntConsumer;
public class ConsumerEx01 {
public static void main(String[] args) {
// Consumer<T> 인터페이스 - 매개변수로 T 타입을 받아 처리, 반환값 없음
Consumer<String> c1 = t -> System.out.println("매개변수 : " + t);
c1.accept("홍길동"); // Consumer의 accept() 메서드 호출, "홍길동" 출력
// BiConsumer<T, U> 인터페이스 - 두 개의 매개변수를 받아 처리, 반환값 없음
BiConsumer<String, Integer> c2 = (a, b) -> System.out.println(a + "/" + b);
c2.accept("홍길동", 10); // "홍길동/10" 출력
// IntConsumer 인터페이스 - int 매개변수를 받아 처리, 반환값 없음
IntConsumer c3 = (a) -> System.out.println(a);
c3.accept(10); // "10" 출력
}
}
import java.util.function.Supplier;
import java.util.function.IntSupplier;
public class SupplierEx01 {
public static void main(String[] args) {
// Supplier<T> 인터페이스 - 반환값이 있는 함수형 인터페이스, 매개변수 없음
Supplier<Object> s1 = () -> new Object(); // Object 객체 생성 후 반환
System.out.println(s1.get()); // 새로운 Object 인스턴스 출력
// Supplier<T> 인터페이스 사용 예시 - 문자열 반환
Supplier<String> s2 = () -> "Hello 함수형 인터페이스";
System.out.println(s2.get()); // "Hello 함수형 인터페이스" 출력
// IntSupplier 인터페이스 - int 반환하는 함수형 인터페이스
// 1부터 6까지의 난수 생성하여 반환
IntSupplier s3 = () -> {
int num = (int)(Math.random() * 6) + 1;
return num;
};
System.out.println(s3.getAsInt()); // 1~6 사이의 난수 출력
}
}
public class FunctionEx01 {
public static void main(String[] args) {
// Function<T, R> 인터페이스 - 입력 매개변수 T를 받아 결과 R을 반환
// Integer 타입의 입력을 받아 String으로 변환하여 포매팅
Function<Integer, String> intToStr = t -> "해답은 " + String.valueOf(t);
// apply() 메서드를 사용하여 입력값 5를 전달하고 결과를 data에 저장
String data = intToStr.apply(5);
System.out.println(data); // "해답은 5" 출력
}
}
``