프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 합니다.
어느 하나가 다른 하나를 대체할 수 있는 것이 아니라, 우리가 원하는 코드에 따라 적절한 것을 잘 골라서 선택하여 사용해야 합니다. 또는 여러가지를 병합해서 사용할 수도 있습니다.

'어떻게' 할건지를 나타내기보다 '무엇'을 풀어내는가에 집중하는 패러다임이다.
작은 '순수 함수'들을 블록처럼 쌓아 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인 패러다임입니다.
(함수형 공장 예시)
즉, 다음 직원에게 넘겨주는 결과물 외에는 아무런 영향을 주지 않는다. => 순수 함수의 특징

(파이프라인 예시)

이런 특징을 가진 파이프라인(함수)들을 적용하고 묶어서 프로그램을 구성해 나가는 기법을 함수형 프로그래밍이라고 한다.
순수 함수: 출력이 입력에만 의존하는 것을 의미합니다.

외부의 상태값을 참조하거나, 외부의 상태를 변경하는 것은 순수함수라고 볼 수 없습니다.
불변성을 유지해야 합니다.

if, for, switch X

for loop를 이용해서 배열을 돌고있다면, 함수형 프로그래밍이라고 할 수 없습니다.!
일급객체, 고차함수
function multiplyBy(factor) {
return function (number) {
return number * factor;
};
}
const multiplyByTwo = multiplyBy(2);
console.log(multiplyByTwo(5)); // 출력: 10
자바에서도 함수형 프로그래밍을 적용하여 코드를 작성하고, 함수형 프로그래밍의 이점을 활용할 수 있습니다.
람다식: 익명 함수를 작성하기 위한 간결한 문법을 제공합니다. 이를 통해 함수를 변수에 할당하거나 다른 함수의 매개변수로 전달할 수 있으며, 함수형 인터페이스를 통해 구현할 수 있습니다.
스트림 API: 데이터를 처리하기 위한 풍부한 기능을 제공합니다. 스트림을 사용하여 데이터를 순착적으로 처리하거나 병렬로 처리할 수 있으며, 맵핑, 필터링, 정렬 등 다양한 데이터 조작 작업을 지원합니다.
함수형 스타일로 데이터 처리를 표현할 수 있도록 도와줍니다.
UI 애플리케이션 특성 상 많은 상태 변화가 일어나기 때문에 순수 함수형 프로그래밍만으로는 무리가 있습니다.
함수형 + 반응형 프로그래밍 또는 객체지향 + 함수형 프로그래밍의 조합을 통해 좀 더 안정적이고 더욱 개발자의 의도에 적합한 프로그래밍을 할 수 있습니다.
얄팍한 코딩사전 - 함수형 프로그래밍이 뭔가요 ?
드림코딩 - 함수형 프로그래밍이 대세다?! (함수형 vs 객체지향)