함수형 프로그래밍
순수 함수를 이용해 사이드 이펙트를 줄이고
선언형 프로그래밍으로 문제를 어떻게 해결할지 보다 문제 해결 자체에 집중하는 프로그래밍 패러다임
함수형 프로그래밍 언어로 설계된 클로저,스칼라,하스켈
등의 언어가 있고, 자바스크립트,코틀린,파이썬
등에도 최근 버전에 함수형 프로그래밍 문법이 추가 되었다.
클로저
함수형 프로그래밍 언어에서 모두 갖고있는 특징
→ 자바스크립트의 특징이 아니기 때문에 특별히 문서에 작성되어 있지 않다
함수형 프로그래밍의 특징
1. 순수함수 (Pure function)
- 동일한 입력에는 항상 같은 값을 반환해야 하는 함수 (멱등성)
- 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수
- 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것
비상태, 불변성 (Stateless, Immutability)
- 함수형 프로그래밍에서의 데이터는 변하지 않는 불변성을 유지해야 한다.
- 데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
2. 선언형 함수 (Expressions)
명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을 할 것인가에 주목한다.
3. 1급 객체와 고차함수 (Fist-class, Higher-order functions)
-> 참조의 투명성을 보장하기 위해..?
함수형 프로그래밍에서는 함수가 1급 객체가 된다. 1급 객체의 특징은 다음과 같다.
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
그리고 고차 함수의 속성을 가져야 하는데, 고차 함수의 특징은 다음과 같다.
- 함수를 인자로써 전달 할 수 있어야 한다.
- 함수의 반환 값으로 또 다른 함수를 사용 할 수 있다
함수형 프로그래밍의 장단점
장점
- 높은 수준의 추상화를 제공한다
- 함수 단위의 코드 재사용이 수월하다
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다
단점
- 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다
- 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있다
- 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다
https://jongminfire.dev/함수형-프로그래밍이란