이번 아티클에서는 Function 함수적 인터페이스에 대해서 살펴보겠습니다. Function 함수적 인터페이스의 특징은, 파라미터 값을 받아 리턴 값으로 타입 변환(매핑)하는 역할을 한다는 점입니다. 즉, 앞서 배운 Consumer, Supplier와 달리 파라미터와 리턴 값이 모두 있다는 특징을 갖게 되는 것이죠. 공통적으로 applyXXX( ) 형태의 추상 메서드를 갖습니다.
파라미터, 리턴 값의 타입에 따라서 Function 함수적 인터페이스들은 아래와 같이 분류됩니다.
인터페이스명 | 추상 메서드 | 설명 |
Function<T, R> | R apply(T t) | 객체 T를 R로 매핑 |
BiFunction<T, U, R> | R apply(T t, U u) | 객체 T와 U를 R로 매핑 |
DoubleFUnction<R> | R apply(double value) | double을 객체 R로 매핑 |
IntFunction<R> | R apply(int value) | int를 객체 R로 매핑 |
IntToDoubleFunction | double applyAsDouble(int value) | int를 double로 매핑 |
IntToLongFunction | long applyAsLong(int value) | int를 long으로 매핑 |
LongToDoubleFunction | double applyAsDouble(long value) | long을 double로 매핑 |
LongToIntFunction | int applyAsInt(long value) | long을 int로 매핑 |
ToDoubleBiFUnction<T, U> | double applyAsDouble(T t, U u) | 객체 T와 U를 double로 매핑 |
ToDoubleFunction<T> | double applyAsDouble(T t) | 객체 T를 double로 매핑 |
ToIntBiFunction<T, U> | int applyAsInt(T t, U u) | 객체 T와 U를 int로 매핑 |
ToIntFunction<T> | int applyAsInt(T t) | 객체 T를 int로 매핑 |
ToLongBiFUnction<T, U> | long applyAsLong(T t, U u) | 객체 T와 U를 long으로 매핑 |
ToLongFunction<T> | long applyAsLong(T t) | 객체 T를 long으로 매핑 |
Function 함수적 인터페이스는 왠지 추상 메서드 구현 과정이 복잡해 보입니다. 기본 형태부터 차근차근 살펴보도록 하겠습니다. Function<T, R> 인터페이스를 살펴볼까요?
우선 이 경우 추상 메서드 apply(T t)를 구현합니다. 이때 위의 API 설명에서 보다시피 파라미터는 T 타입의 객체 한 개입니다. 그리고 리턴 타입은 R입니다. 다소 헷갈릴 수 있는 구성이니 예시를 들어볼까요?
Student라는 객체 타입이 있다고 가정해 봅시다. 그리고 Student 객체에 getName( )이라는 메서드가 선언되어 있다고 해보겠습니다. 여기서 getName( )의 리턴 타입은 String입니다. 그런 상태에서 Function<T, R>을 사용한다고 하면 아래와 같이 사용할 수 있죠.
Function<Student,String> function = t -> { return t.getName(); }
// 또는
Function<Student,String> function = t -> t.getName();
자, 위의 경우 제네릭 T는 Student, R은 String으로 선언되었습니다. 그럼 이 람다식의 경우 Student 타입의 객체를 파라미터로 받고, 거기서 getName( )을 실행해 얻게되는 String 값을 리턴하라는 의미가 되었습니다.
한 가지 시를 더 살펴보겠습니다. ToIntFunction<T> 인터페이스를 확인해 보겠습니다. 추상 메서드 applyAsInt(T t)가 존재합니다. 여기서는 T 객체 하나를 받고, int 타입을 리턴합니다. 여기서도 Student 객체를 사용하는데, 이 객체는 getScore( )라는 메서드가 선언되어 있습니다. 리턴 타입은 int죠. 위와 마찬가지로 람다식을 통해 추상 메서드 구현을 진행해 보겠습니다.
ToIntFunction<Student> function = t -> { return t.getScore(); }
// or
ToIntFunction<Student> function = t -> t.getScore();
다음 아티클에서 Student 클래스를 직접 선언해서 예제를 만들어보겠습니다.
'Programming > JAVA' 카테고리의 다른 글
람다식(4) - 표준 API의 함수적 인터페이스 5 : Operator Functional Interface 1 (0) | 2023.06.18 |
---|---|
람다식(4) - 표준 API의 함수적 인터페이스 4 : Function Functional Interface 2 (0) | 2023.06.14 |
람다식(4) - 표준 API의 함수적 인터페이스 3 : Supplier Functional Interface (0) | 2023.06.05 |
람다식(4) - 표준 API의 함수적 인터페이스 2 : Consumer Functional Interface (0) | 2023.06.04 |
람다식(4) - 표준 API의 함수적 인터페이스 1 (0) | 2023.05.28 |