함수형 프로그래밍(Functional Programming)
함수형 프로그래밍이란?
✏️ ☑️프로그래밍 패러다임의 하나로 프로그래밍 패러다임 중 ☑️선언형 프로그래밍에 속하며, ☑️순수 함수(Pure Function)를 조합하여 프로그램을 만드는 방식을 말한다.
✅ 순수 함수(Pure Function) : 함수는 주어진 입력으로 계산하는 것 이외에 프로그램의 실행에 영향을 미치지 않아야 하며, 이를 부수 효과(side effect)라고 하고 이러한 함수를 순수 함수라고 한다.
순수 함수의 장점 :
- 함수 자체가 독립적이며 Sids-Effect가 없기 때문에 Thread에 안정성을 보장받을 수 있다.
- 함수의 실행이 외부에 영향알 끼지치 않는 함수
✅ 프로그래밍 패러다임 : 개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의마하며 이러하면 프로그래밍 패러다임은 크게 두가지로 나눌 수 있다.

1️⃣ 명형형 프로그래밍 :
✏️ 프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 쉽게 설명하자면, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이라고 볼 수 있다.
- 절차적 프로그래밍 : ☑️프로시저(Procedure)를 이용해 순차적인 처리를 중요시 여기는 패러다임|
✅ 프로시저(Procedure) - 루틴, 서브루틴, 메소드, 함수 등 - ☑️객체 지향 프로그래밍 : 객체들의 집합으로 프로그래밍의 상호작용을 표현
✅ 객체 - 여기서 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
✏️ 선언형 프로그래밍은 보통 두 가지 뜻으로 통용된다.
첫 번째는 프로그램이 무엇을 해야 할지를 나타내는 경우를 선언형이라고 한다. 예를 들어 컴퓨터 화면에 웹 페이지를 나타낼 때 "어떤 방법"으로 페이지를 나타내야 하는지 보다 제목, 본문, 그림 등과 같이 "무엇"을 화면에 나타내야 할지를 고민하는 것이 선언형 프로그래밍이다.
두 번째는 프로그램이 함수형, 논리형, 제한형 프로그래밍 언어 등으로 작성된 경우에 선언형이라고 한다. \
- 함수형 프로그래밍
💎 특징
- 순수 함수 (Pure Function)
- 비상태, 불변성(Statelee, Immutability)
- 함수형 프로그래밍에서의 데이터는 변하지 않는 불병성을 유지해야 한다.
- 데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다. - 선언형 함수 (Expressions)
- 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을할 것인가에 주목한다.
- 함수형 프로그래밍에서는 명령문(if,switch,for등...)을 사용하지 않고 함수형 코드(filter,map,take,reduce 등...)로 사용해야한다. - 1급 객체와 고차함수
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
고차함수
- 함수를 인자로써 전달 할 수 있어야 한다.
- 함수의 반환 값으로 또 다른 함수를 사용 할 수 있다
🎈 장점
- 높은 수준의 추상화를 제공함
- 함수 단위의 코드 재사용이 수월
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워짐
❗️ 단점
- 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있음
- 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음
참조 :
1️⃣ https://adjh54.tistory.com/97
2️⃣ https://code-lab1.tistory.com/245
3️⃣ https://code-lab1.tistory.com/244
4️⃣ https://minsone.github.io/programming/pure-function
5️⃣ https://velog.io/@younoah/programming-paradigm