함수형 프로그래밍 (Functional Programming, FP) - YooByWk/YooByWk.github.io GitHub Wiki
함수형 프로그래밍 (Functional Programming, FP)
함수형 프로그래밍(FP)는 함수를 일급 시민으로 간주하고 프로그램의 상태 변경 및 부수 효과(Side Effect)를 최소화하는 것을 지향하는 패러다임.
해당 위키는 우선적으로 JavaScript를 기준으로 설명한다.
일급 객체와 일급 함수
| 개념 | 정의 |
|---|---|
| 일급 시민(First Class Citizen) | 특정 언어에서 다른 객체들과 동등하게 취급되는 객체 |
| 일급 함수(First Class Function) | 함수를 일급 시민으로 취급하는 것 |
자바스크립트에서의 함수형 프로그래밍
자바스크립트에서 함수형 프로그래밍이 적용될 수 있는 근본적 이유는 다음과 같다.
- 함수를 변수에 할당 가능하다.
- 다른 함수의 인수로 함수를 전달할 수 있다. (콜백)
- 함수가 함수를 반환하는 것이 가능하다. (클로저, 고차 함수)
위의 모든 것이 가능하다.
함수가 함수를 반환하는 특성 클로저는 고차 함수 및 커링의 기초가 된다. 이는 콜백 지옥을 유발하는 것 보다, 복잡한 비동기 흐름을 제어하고 추상화하는 FP의 매커니즘으로 활용된다.
정의
수학적 함수에 기반하여 동일한 입력에 대해 항상 동일한 출력을 보장하고 외부 상태를 변경하지 않는 순수 함수(Pure Function) 작성을 지향하는 패러다임.
핵심
- 순수 함수(Pure Function) : 동일 입력 -> 동일 출력 보장. 외부 상태에 의존하지 않으며, 외부 상태를 변경하지 않는다.
- 불변성(Immutability) : 데이터는 생성 후 변경될 수 없으며, 변화가 필요한 경우에는 반드시 새로운 데이터를 생성한다.
- 선언적 프로그래밍 :
for루프와 같은 "어떻게 동작한다" 대신,map,filter처럼 무엇을 할 지 명시하는 코드를 작성한다. - 고차 함수 : 다른 함수를 인수로 받거나 함수를 반환하는 함수.
- 함수 합성 : 여러 개의 작은 순수 함수를 결합하여 데이터 처리의 파이프라인을 구축하는 기법
이점
- 높은 예측 가능성 : 순수함수의 특성으로 코드의 동작을 신뢰하고 이해하기 쉽다.
- 디버깅 용이성 : 사이드 이펙트가 격리되어 오류 발생 지점 추적 및 수정 용이.
- 병렬 처리 용이성 : 외부 상태 의존성이 낮아 데이터 경쟁 조건을 방지하며, 동시성을 안전히 확보 가능
- 테스트 용이성 : 외부 의존성이 없는 순수 함수는 독립적인 유닛 테스트 수행에 적합하다.
여담
FE/BE 통합: 함수형 프로그래밍은 프론트엔드(React, Vue)와 백엔드(Node.js/NestJS) 모두 JavaScript를 사용하여 일관된 패러다임으로 개발할 수 있게 해준다.
Rust 및 Wasm: Rust와 같은 언어는 메모리 안정성을 통해 FP의 장점을 극대화하며, 이를 **WebAssembly (Wasm)**로 컴파일하여 CPU 집약적 작업을 안전하고 효율적으로 처리할 수 있다.
라이브러리: Lodash, Ramda와 같은 라이브러리는 FP 원칙에 따라 설계된 순수 함수를 제공하여, 개발자가 불변성을 쉽게 유지하며 복잡한 데이터 처리를 수행하도록 돕는다.
Todo
클로저 추가.