Java - Simple Currying and example

1 분 소요

Java - Currying

  • Currying은 n개의 인자를 받는 함수로부터 m(m < n)의 인자의 값을 고정한 새로운 함수를 만들어내는 것을 말합니다.
f(a, b, c) # Original Function
# 원래 함수로부터 a의 값을 고정 시킨 새로운 함수를 만듬.
g(a=10, b, c) # Curried Function

Java - Currying Example

  • Java에서도 FuncalInterface를 사용해서 currying을 수행할 수 있습니다.
  • 사실, Function<T, R>을 사용해도 되지만, 글자가 너무 길어서 저는 FunctionalInterfaceF를 새로 만들었습니다.
import java.util.function.*;

class Main {
    @FunctionalInterface
    public interface F<InputType, OutputType> {
        public OutputType apply(InputType x);
    }
    public static void main(String[] args) throws Exception {
        /*
        * polyEquation: 4개의 인자를 순차적으로 받는 3차 방정식
        * "a + b * x + c * x * x"를 의미하며,
        * a, b, c, x 의 순으로 인자를 받을 계획입니다.
        * */
        F<Double, F<Double, F<Double, F<Double, Double>>>> polyEquation;
        // a -> b -> c -> x 의 순으로 인자를 하나씩 입력받겠다고 정의합니다.
        polyEquation =  a -> b -> c -> x -> {
            return a + b * x + c * x * x;
        };
        // a, b, c를 순차적으로 적용했습니다.
        // 하지만, x는 아직 적용하지 않았죠. 따라서 얘는 아직도 function입니다
        F<Double, Double> poly_1_2_3 = polyEquation.apply(1.0). apply(2.0).apply(3.0);
        System.out.println( poly_1_2_3.apply(10.0) ); // 321.0
        System.out.println( poly_1_2_3.apply(1.0) ); // 6.0
    }
}

댓글남기기