# Lambda에대해서

# Lambda에대해서

by jihoon kim

HTML

<h1>Lambda에대해서
</h1>

<pre>
# Lambda(λ) 란?
    .각종프로그래밍언어의Lambda function 은논리수리학, 컴퓨터공학의Lambda 대수에서차용해온개념입니다.
    .흔히Lambda 를표현하는문자λ은그리스문자로,알파벳의L 과같습니다.
    .Lambda 대수는변수, 추상화, 적용이라는개념이있는데, 주로선언되는양식은(변수..) .{추상화단계} 형태이며, anObject.someFunction(lamdaFunction);
    과같이함수의일반적호출형태를통해‘적용’하게됩니다.
    .함수대신에, 추상화라는개념이들어간다는점에서는Lambda를지원하는언어의공통점입니다.
    .Java 8 이전에,가장흔히접해보았을Lambda와유사한문법으로는Javascript의anonymous function 이있습니다.

# Lambda 의특성과장점
    .선언(추상화) 관점에서, 함수보다간결한syntax 를제공합니다.
    .비슷한여러개의logic 을위해, 여러개의function 을선언할필요가없습니다.
    .언어가문법적으로inline-function 을지원하지않더라도유사하게활용할수있습니다.
    .Lambda function 을인자로하는함수/ lambda function 의경우, 일부개념을구분하여구현하는데도움이됩니다.
    .Lambda function 을인자로하게되면, 사용자가내부로직일부를customize
    할수있는기능을부여할수있습니다.

# Lambda활용예시-Javascript

    :: Javascript
        varpower = function(x) {
            return function(n) {
            return Math.pow(n, x);
            }
        };

        // cubic 은세제곱을구하는함수가됨

        varcubic = power(3);
        // sqrt 는x의제곱근을구하는함수가됨varsqrt = power(0.5);

        console.log(cubic(5)); // 125

        console.log(sqrt(64)); // 8

    :: Javascript(ES2015 이후)

        varpower = x => n => Math.pow(n, x);
        // cubic 은세제곱을구하는함수가됨

        varcubic = power(3);
        // sqrt 는x의제곱근을구하는함수가됨varsqrt = power(0.5);

        console.log(cubic(5)); // 125

        console.log(sqrt(64)); // 8

    :: Lambda활용예시.Python
        def power(x):
        return lambda n: pow(n, x)
        cubic = power(3)
        sqrt = power(1/2)
        print(cubic(5)) # 125
        print(sqrt(64)) # 8

# Java 에서의Lambda
    .기존Java 1.7 이하에는없던Function variable 에대한개념이생겼습니다.
    (Document 참조java.util.function)
    .Java 내에서는개념적으로Function, Supplier, Consumer, Operator, Predicate
    로구분하고있고, 인자수에따라Bi-(2개), Unary-(1개) 등으로도구분합니다.
    .Lambda 함수는주로Java Stream API, Optional API 에쓰이고있습니다.

# Java Lambda function 의종류
    .Function<T, R>: T 타입인자를받아서R 타입으로변환하여반환합니다.
    R Apply(T t);
    .Supplier<T>: T 타입객체를새로만들어반환합니다.
    T get();
    .Consumer<T>: T...