프로그램의 크기가 커지면서 발생하는 스파게티 코드 등 유지보수가 까다로웠던 명령형 프로그래밍의 단점을 보완하고자 나온 프로그래밍 패러다임으로 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법이다. 또한, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리한다.
함수형 프로그래밍은 다른 언어에 비해 비교적 빨리 나왔음에도 수학의 원리와 연관이 있기 때문에 배우는데 어려워 인기를 끌지 못 하다가 최근 들어 빅데이터, 비트코인 등의 발전으로 방대한 데이터를 빠르게 계산하는게 중요해진 요즘 사람들의 관심을 가지게 되었다.
파이프라인 처럼 입력(Input)을 넣으면 처리과정을 거쳐서 결과(Output)이 나온다. 외부에서는 이 파이프라인의 정보를 접근할 수 없고 안에서도 밖을 접근 할 수가 없다. 이런 함수들을 묶어서 프로그램을 구성해나가는 것을 말한다.
자바스크립트의 함수는 객체이므로 1급 함수이다.
외부의 상태값을 참조하거나 외부의 상태를 변경할 수 없고 동일한 인자를 넣었을때 항상 동일한 결과값을 반환하고 외부의 영향을 전혀 받지않는 함수이다.
외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경하지 않는 것이다. 함수에 인자로 전달된 데이터를 변경하는 것이 아니라 새로운 버전의 새로운 오브젝트를 만들어 결과값을 전달하며 절대 데이터를 변경하지 않는다.
함수형 프로그래밍에서는 if 나 switch, for과 같은 Statement가 아닌 표현식을 사용해야한다.
합성 함수란 새로운 함수를 만들어거나 계산하기 위해 둘 이상의 함수를 조합하는 과정을 말한다. 함수형 프로그램은 여러 작은 순수 함수들로 이루어져있기 때문에 이 함수들을 연쇄적으로 또는 병렬로 호출해서 더 큰 함수를 만드는 과정으로 전체 프로그램을 구축해야 한다.
반복문 대신에 map과 filter, reduce, all, any, find 등을 사용
명령형으로 작성하지 말고 선언형으로 작성한다
파이프라인을 사용한다