대표적인 함수형 인터페이스
T 타입을 받아서 R 타입을 리턴하는 함수형 인터페이스
		// Function<T,R>
        Function<Integer, Integer> plus10 = (i) -> i + 10;
        Function<Integer, Integer> multiply2 = (i) -> i * 2;
        plus10.andThen(multiply2).apply(2); // (10 + 2) * 2 = 24
        plus10.compose(multiply2).apply(2); // (2 * 2) + 10 = 14apply()를 통해 매개변수 전달 가능
default 메소드 andThen(), compose()
		// BiFunction<T,U,R>
        BiFunction<Integer, Integer, Integer> addTwoInt = (a, b) -> a + b;
        int res = addTwoInt.apply(10,15);
        System.out.println(res);T 타입을 받아서 아무 값도 리턴하지 않는 함수형 인터페이스
		// Consumer<T>
		Consumer<Integer> printInt = input -> System.out.println(input);
        
		printInt.accept(10);T 타입의 값을 제공하는 함수형 인터페이스
		// Supplier<T>
        Supplier<Integer> get20 = () -> 20;
        int res2 = get20.get();T타입을 받아서 boolean을 리턴하는 함수형 인터페이스
		// Predicate<T>
        Predicate<String> startWithHong = str -> str.startsWith("Hong");
        boolean res3 = startWithHong.test("HongJungWan");앞서 살펴본 Function<T, R>의 특수한 형태
		// UnaryOperator<T>
        UnaryOperator<Integer> plus30U = input -> input + 30;
        int res4 = plus30U.apply(30);BinaryOperator는 BiFunction<T, U, R>의 특수한 형태
		// BinaryOperator<T>
        BinaryOperator<Integer> addTwoIntB0 = (a, b) -> a + b;
        int res5 = addTwoIntB0.apply(20, 80);