And Brain said,
함수적인, 너무나 함수적인 - 1. 람다 대수 (Lambda Calculus)와 합성 함수 본문
Index
0. 함수형 프로그래밍
1. 람다 대수 (Lambda Calculus)와 합성함수
2. 범주론 (Category Theory)
3. 모노이드 (Monoide)
4. 펑터 (Functor)와 엔도펑터(Endo Functor)
5. 모나드 (Monad)
6 함수형 프로그래밍의 고급 기법
람다
람다(λ, Lambda)는 그리스 문자로, 람다 계산법(Lambda Calculus)에서 사용되는 기호입니다. 람다 계산법은 알론조 처치(Alonzo Church)가 1930년대에 개발한 수학 이론으로, 함수의 정의, 응용, 조합 등을 다루는 이론입니다. 이때 함수를 표현하기 위해 람다 기호를 사용하였습니다.
람다 계산법에서 람다 기호는 함수를 선언할 때 사용되며, 이는 프로그래밍 언어에서의 함수 선언과 유사한 개념입니다. 예를 들어, 함수 f(x) = x + 1을 람다 표현식으로 나타내면 다음과 같습니다.
λx. x + 1
여기서 λx는 함수의 매개변수를 의미하며, x + 1은 함수의 본문입니다. 이를 프로그래밍적으로 표현하면 다음과 같습니다.
const addOne = (x: number): number => x + 1;
함수형 프로그래밍에서 람다는 "익명 함수" 또는 "람다 함수"라고도 부르며, 이름이 없는 함수를 정의하고 사용할 때 사용됩니다. 람다 함수는 일급 객체로 (first-class object) 취급되어 변수에 할당되거나 다른 함수의 인자로 전달될 수 있습니다.
일급 객체란 프로그래밍 언어에서 다음과 같은 특성을 가지는 객체를 말합니다
변수에 할당할 수 있다.
함수의 인자로 전달할 수 있다.
함수의 반환값으로 사용할 수 있다.
자료 구조에 저장할 수 있다.
이러한 특성을 가진 객체는 프로그래밍 언어에서 일급 시민으로 취급되며, 프로그래머가 객체를 유연하게 사용할 수 있게 합니다.
일급 함수(first-class function)는 함수가 일급 객체로 취급되는 것을 의미합니다. 함수형 프로그래밍 언어에서는 함수가 일급 객체로 취급됩니다. 이 뜻은 다시 말해, 함수를 다른 함수의 인자로 전달하거나, 함수의 반환값으로 사용할 수 있으며, 변수에 할당하거나 자료 구조에 저장할 수 있다는 의미입니다. 고차 함수(higher-order functions)라고도 부릅니다.
합성 함수
함수의 합성은 두 개 이상의 함수를 합쳐서 새로운 함수를 만드는 과정 즉, 기본 함수들을 조합하여 더 복잡한 함수를 생성하는 개념입니다. 수학에서는 함수 g와 함수 f를 합성하면, 새로운 함수 h(x) = g(f(x))를 만들 수 있습니다. 이렇게 만들어진 함수 h는 먼저 함수 f를 적용한 결과를 입력으로 받아 함수 g를 적용한 결과를 반환합니다.
이를 프로그래밍적으로 표현해보면,
const double = (x: number): number => x * 2;
const square = (x: number): number => x ** 2;
const compose = <T, U, V>(f: (x: U) => V, g: (x: T) => U) => (x: T): V => f(g(x));
const doubleThenSquare = compose(square, double);
console.log(doubleThenSquare(3)); // 결과: 36
두 개의 함수 double과 square는 각각 입력값을 두 배로 만드는 함수와 입력값을 제곱하는 함수입니다. compose 함수는 두 함수를 합성하여 새로운 함수를 반환합니다. 이제, doubleThenSquare 함수는 입력값을 두 배한 후 제곱하는 함수로 함수 합성을 통해 생성되었습니다. 이처럼 함수 합성을 이용하면 작은 함수들을 조합하여 더 큰 기능을 구현할 수 있습니다.
간단히 정리해보자면, 람다 계산법은 함수형 프로그래밍에서 함수를 일급 시민으로 취급하는 개념의 토대가 된 수학적 이론이고, 합성 함수는 이 람다 계산법의 개념을 바탕으로, 두 개 이상의 함수를 결합하여 새로운 함수를 생성하는 방법인 것입니다. 이 개념들은 함수형 프로그래밍에서 당연히 알아야할 개념들입니다. 자, 이제 다음은 범주론(Category Theory)으로 넘어가봅시다.
Thanks for watching, Have a nice day.
References
https://teamdable.github.io/techblog/Moand-and-Functional-Architecture
https://dinfree.com/lecture/language/112_java_9.html
'IT > 함수적인, 너무나 함수적인' 카테고리의 다른 글
함수적인, 너무나 함수적인 - 5. 모나드(Monad) (4) | 2023.05.01 |
---|---|
함수적인, 너무나 함수적인 - 4. 펑터 (Functor)와 엔도펑터(Endo Functor) (4) | 2023.04.22 |
함수적인, 너무나 함수적인 - 3. 모노이드(Monoid) (0) | 2023.04.17 |
함수적인, 너무나 함수적인 - 2. 범주론 (Category Theory) (0) | 2023.04.16 |
함수적인, 너무나 함수적인 - 0. 함수형 프로그래밍 (0) | 2023.04.16 |