FreeHand

함수형 인터페이스 본문

Language/Java

함수형 인터페이스

Jinn 2024. 1. 7. 00:25

단 하나의 추상 메서드만 선언된 인터페이스.
 

// 함수형 인터페이스
@FunctionalInterface
interface AddNumber {
    int add(int x, int y);
}

// 익명 클래스
AddNumber addNumber1 = new AddNumber() {
    public int add(int x, int y) {
        return x + y;
    }
}

// 람다식 (함수형 인터페이스 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 함)
AddNumber addNumber2 = (x, y) -> x + y;

int result1 = addNumber1.add(5, 10); // 15
int result2 = addNumber2.add(5, 10); // 15

 
자바에서 람다식은 익명객체이므로 람다식을 다루려면 참조변수(addNumber2)가 필요한데 이때 참조변수의 타입을 함수형 인터페이스로 사용한다. 람다식을 호출하기 위해서 함수형 인터페이스의 추상 메서드 이름(add)을 사용한다.


java.util.function 패키지에 이미 정의된 함수형 인터페이스가 있다.
 

  • Function<T, R>
Function<String, Integer> f = s -> Integer.parseInt(s);
// Fucntion<String, Integer> f = Integer::parseInt;

System.out.println(f.apply("3")); // 3(Integer)

Function 함수형 인터페이스는 한 개를 input 받고 한 개를 return 한다.
 

  • Consumer<T>
Consumer<Integer> c = i -> System.out.println(i);
// Consumer<Integer> c = System.out::println;

c.accept(3); // 3

Consumer 함수형 인터페이스는 한 개를 input 받고 아무것도 return 하지 않는다.
 

  • Supplier<T>
Supplier<Integer> s = () -> 3;

System.out.println(s.get()); // 3

Supplier 함수형 인터페이스는 input 받지 않고 return 한다.
 

  • Predicate<T>
Predicate<String> p = s -> s.startsWith("a");

System.out.println(p.test("abc")); // true

Predicate 함수형 인터페이스는 한 개를 input 받아서 boolean 타입을 return 한다.
 

  • UnaryOperator<T>
UnaryOperator<Integer> u = i -> i * 2;

System.out.println(u.apply(5)); // 10

UnaryOperator 함수형 인터페이스는 Function과 기능은 동일하지만 input과 return의 타입이 일치할 때 사용한다.
 
 
이외에도 BiFunction<T, U, R>, BinaryOperator<T> 등 여러 함수형 인터페이스가 java.util.function 패키지에 정의되어 있다.

'Language > Java' 카테고리의 다른 글

병렬처리(Thread, Stream)  (0) 2024.02.19
스트림1  (0) 2024.01.07
익명 클래스  (0) 2024.01.06
내부 클래스  (0) 2024.01.06
SOLID  (0) 2023.11.22