순수 함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용을 피해 소프트웨어를 만드는 프로세스

왜 등장 하게 되었는가?
명령형 프로그래밍을 기반으로 개발했던 개발자들은 개발하는 소프트웨어의 크기가 커짐에 따라, 복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이 매우 힘들다는 것을 깨닫게 되었다. 그리고 이를 해결하기 위해 함수형 프로그래밍이라는 프로그래밍 패러다임에 관심을 갖게 되었다. 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.
'선언형' 프로그래밍. 애플리케이션의 상태는 순수 함수를 통해 전달된다.
애플리케이션의 상태가 일반적으로 공유되고 객체의 메서드와 함께 배치되는 OOP와는 대조되는 프로그래밍 방식이다.
명령형 프로그래밍(절차지향, 객체지향)
-상태와 상태를 변경시키는 관점에서 연산을 설명하는 방식
-알고리즘을 명시하고, 목표는 명시하지 않음
선언형 프로그래밍
-어덯게 보단 무엇을 중점으로 설명하는 방식
-알고리즘을 명시하지 않고 목표만 명시
명령형 프로그래밍은 어떻게 할지를 표현하고, 선연형 프로그래밍은 무엇을 할 건지 표현한다.
함수 형 프로그래밍의 의미를 파악하기 전 꼭 알아야 할 것들
입출력이 순수해야 한다: 반드시 하나 이상의 인자를 받고, 받은 인자를 처리해 반드시 결과물을 돌려줘야 함. 인자 외 다른 변수 사용 금지대표적인 JS 함수형 프로그래밍 함수: map, filter, reduce
함수형 프로그래밍 예
const arr = [1,2,3,4,5];
const map = arr.map(function(x) {
return x * 2;
}); // [2, 4, 6, 8, 10]
arr을 넣어서 map을 얻었다. arr을 사용했지만 값은 변하지 않았고 map이라는 결과를 내고 어떠한 부작용도 낳지 않았다.
이런 것이 함수형 프로그래밍의 순수함수라고 한다.
출처: https://mangkyu.tistory.com/111 [MangKyu's Diary:티스토리]
참고: https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Fuctional%20Programming.md