Java

[Java] 함수형 인터페이스 종류 및 사용 방법

cob 2023. 5. 26. 10:40

 

함수형 인터페이스란?
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 어노테이션은 선택사항이지만, 인터페이스가 함수형 인터페이스임을 명시적으로 나타내는 데 도움이 된다.
  • 함수형 인터페이스는 람다 표현식, 메서드 참조 등을 사용하여 인스턴스를 생성할 수 있다.

2023.05.22 - [Java] - [Java] 람다 표현식 사용 방법

2023.05.24 - [Java] - [Java] 메서드 참조 사용 방법

 

 

반응형