Java 8에서 도입된 Function의 기본적인 사용 방법 및 예제에 대해서 알아보겠습니다.
1. Function
Java 8의 Function은 1개의 인자(Type T)를 받고 1개의 객체(Type R)를 리턴하는 함수형 인터페이스입니다.
public interface Function<T, R> {
    R apply(T t);
}2. Function의 구현 방법 및 예제
다음 예제는 Function 구현 및 apply()가 어떻게 동작하는지 알려줍니다.
Function 객체는 람다식으로 구현할 수 있습니다. 그리고 apply() 호출과 함께 Integer 객체를 인자를 전달하면 람다식의 구현 내용이 수행되며 결과가 Integer 객체로 리턴됩니다.
import java.util.function.Function;
public class FunctionExample1 {
    public static void main(String[] args) {
        Function<Integer, Integer> func1 = x -> x * x;
        Integer result = func1.apply(10);
        System.out.println(result);
    }
}Output:
1003. andThen()으로 다수의 Function 순차적 수행
Function.andThen()은 인자로 Function 객체를 받으며, 다수의 Function들을 순차적으로 실행합니다.
다음 예제는 andThen()이 어떻게 동작하는지 알려줍니다.
apply()의 인자는 먼저 func1에 전달되며, func1의 결과가 func2의 인자로 전달됩니다. 그리고 func2의 결과가 리턴됩니다.
import java.util.function.Function;
public class FunctionExample2 {
    public static void main(String[] args) {
        Function<Integer, Integer> func1 = n -> n * n;
        Function<Integer, String> func2 = n -> "result: " + n;
        String result = func1.andThen(func2).apply(10);
        System.out.println(result);
    }
}Output:
result: 1004. compose()로 Function 합성
Function.compose()는 인자로 Function을 받으며, 두개의 Function을 합쳐진 하나의 Function 객체를 리턴합니다.
합성되는 두개의 Function은 인자 타입과 리턴 타입이 서로 맞아야 됩니다.
다음 예제는 compose()에 대해서 소개합니다.
multiply.compose(add)는 add와 multiply 함수를 합성합니다.
addAndMultiply.apply(1)는 1이 add 함수에 인자로 전달되며, 그 결과가 multiply 함수에 전달되며 결과가 리턴됩니다.
import java.util.function.Function;
public class FunctionExample3 {
    public static void main(String[] args) {
        Function<Integer, Double> add = n -> n + 2.0;
        Function<Double, Double> multiply = n -> n * 5.0;
        Function<Integer, Double> addAndMultiply = multiply.compose(add);
        Double result = addAndMultiply.apply(1);
        System.out.println(result);
    }
}Output:
15.0Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedReader로 파일 읽기
- Java - BufferedWriter로 파일 쓰기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java charAt() 함수 알아보기
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기