프로그래밍 코드를 작성하는 방식으로, 객체 지향 패러다임과 충돌하는 것이 아니기 때문에 둘 다 동시 적용이 가능하다.

절차 지향적 코드는 여러 변수가 사용된다. 반면 함수형 코드의 경우 가능한 변수 사용을 최소화한다.
변수는 코드에 영향을 주고 역으로 코드에서 영향을 받기 때문에, 변수가 많아질수록 개발자가 실수하거나 의도하지 않은 않은 값의 변경의 소지가 커진다.
일급 객체란 숫자 등의 일반적인 다른 데이터들처럼 함수가 다뤄질 수 있는 것을 의미한다.
즉, 함수가 변수에 할당 될 수도 있고, 배열 등에 담길 수 있고, 함수의 인자로 들어갈 수도 있는 것을 의미한다.
함수형 프로그래밍 언어에서는 함수가 일급 객체이다. 따라서 함수형 프로그래밍인 자바 스크립트에서는 함수도 객체와 같이 사용될 수 있기 때문에 함수를 변수나 상수에 값으로 할당할 수 있다.
반면, 자바의 경우 메소드는 값으로 할당될 수 없다. 자바에서 함수형 프로그래밍을 하기 위해서는 lambda 표현식과 STREAM API 등 우회적인 방법을 사용해야 한다.
4️⃣-1️⃣ 순수 함수
언제 실행되든 몇 번이 실행되든 같은 입력값에 대해서 같은 결과값을 반환하는 함수들을 의미한다.
매개 변수로 주어지는 값 외에는 외부의 어떤 값에도 영향을 받지 않는다.
위의 사진의 경우 add 함수는 변수의 입력값을 제외하고 다른 어떤 값에도 영향을 받지 않는 순수 함수이다.
4️⃣-2️⃣ 불변성의 원칙
순수 함수의 원칙에 의해서 함수형 프로그래밍에서는 현존하는 데이터의 원본을 수정하지 않고 수정할 일이 있다면 반드시 사본을 만들어서 수정한다. 다시 말해 수정 사항은 항상 사본을 만들어 적용하여 원본은 변하지 않는 것이 불변성의 원칙이다. 이러한 특징으로 함수형 코드는 상태 변경으로 인한 버그 발생 가능성을 줄일 수 있다.
4️⃣-3️⃣ 참조 투명성
위 사진의 add 함수는 a+b를 반환하는 함수이기 때문에 3과 4를 전달하면 7이 나온다. 따라서 아래에서 add(3,4)는 7로 대체하여 사용할 수 있는데. 이는 add 함수가 순수 함수이고 그 함수의 실행이 외부에 미치는 변화가 없기 때문에 가능하다. 즉, 함수형 코드의 호출문은 그 반환값으로 대체할 수 있다.
4️⃣-4️⃣ 고차 함수 , 콜백 함수
이 둘은 모두 함수가 1급 객체인 언어이기 때문에 가능한 것이다.

applyOpertation 함수는 add 함수를 매개 변수로 받는 고차함수, add 함수는 applyOpertation 함수의 인자로 들어가는 콜백 함수이다. 고차 함수를 사용하여 둘 이상의 함수들을 조합하여 새로운 함수를 만들어내는 등의 정교한 작업을 할 수 있다.