함수형 프로그래밍

함수형 프로그래밍은 함수 기반의, 가변 데이터를 최소화하는 프로그래밍 패러다임이다. 기존 객체 지향 (혹은 절차 지향)에 비해 함수형 프로그래밍은 사용 빈도가 적었으나 최근 여러 프레임워크에서 함수형 프로그래밍의 채택이 많아지며 함수형 프로그래밍도 점점 사용 빈도가 늘어나고 있다.

따라서 함수형 프로그래밍의 연구 정도는 객체 지향에 비해 그 정도가 굉장히 적다. 디자인 패턴도 객체 지향에 맞춰져 있고, 함수형 프로그래밍의 디자인 패턴은 아직까지는 많이 없다.

선언형 프로그래밍

함수형 프로그래밍은 선언형 프로그래밍의 한 종류이다. 위키에서는 선언형 프로그래밍을 아래처럼 설명한다.

프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 선언형이라고 한다.

프론트 개발자에게 가장 친숙한 선언형 문법은 HTML, CSS이다. (둘 다 프로그래밍 언어는 아니지만...)

함수형 프로그래밍과 수학

함수형 프로그래밍은 그 기원부터 수학과 관련이 깊다. 위키에서 소개하길

함수형 프로그래밍은 1930년대에 계산가능성, 결정문제, 함수정의, 함수응용과 재귀를 연구하기 위해 개발된 형식체계인 람다 대수에 근간을 두고 있다.
다수의 함수형 프로그래밍 언어들은 람다 연산을 발전시킨 것으로 볼 수 있다.

라고 한다.

람다 대수란 하나의 형식 체계로서, 추상화와 함수 적용들의 논리 연산을 다룬다. 위키에서 보면 함수형 프로그래밍에서 자주 나오는 패턴들이 람다 대수에서 왔다는 것을 바로 느낄 수 있을 것이다.

순수 함수와 수학에서의 함수

함수형 프로그래밍에는 순수 함수라는 개념을 굉장히 중요하게 생각한다. 순수 함수는 외부에 영향을 주고 받지 않아 동일한 input에는 항상 동일한 output이 나오는 함수를 의미한다. 이는 수학에서의 함수와 동일하다.

수학에서 사용하는 함수는 모두 순수 함수이다. 수학에서의 함수 예시는

y = x + 1
y = x ^ 2

등등이 있는데, 모든 함수가 주어진 변수에 의해서만 계산되므로 수학에서의 함수는 순수함수다.

따라서 함수형 프로그래밍으로 개발을 하기 위해선 모든 함수를 수학에서의 함수처럼 구성해야 한다. 주어진 파라미터를 이용해 결과값을 내는 것이다.

함수형 프로그래밍과 이점

함수형 프로그래밍에서 함수는 곧 값이다. 따라서 순수 함수를 사용한다는 것은 외부에 영향을 주지도 않고 외부에서 영향을 받지도 않는 많은 값들이 존재한다는 것이다. 이는 프로젝트 전체의 실행에서 예상하지 못한 부작용을 줄일 수 있다.

또한 함수는 대부분 테스트, 재사용, 분할에 유리하다. 따라서 프로젝트의 복잡도가 과하게 증가하는 것을 방지할 수 있다.

함수형 프로그래밍과 패턴

객체 지향에 비해 함수형 프로그래밍은 디자인 패턴이 많지않다. 옵저버 패턴과 같이 객체 지향과 함수형 프로그래밍에서 전부 사용할 수 있는 패턴도 있으나, 싱글턴 패턴처럼 함수형 프로그래밍에 그대로 적용시키기 어려운 패턴들도 많다.

그래서 못 적음...

참조

함수형 프로그래밍
람다 대수
선언형 프로그래밍