함수형 프로그래밍 (Functional Programming, FP) - YooByWk/YooByWk.github.io GitHub Wiki

함수형 프로그래밍 (Functional Programming, FP)

함수형 프로그래밍(FP)는 함수를 일급 시민으로 간주하고 프로그램의 상태 변경 및 부수 효과(Side Effect)를 최소화하는 것을 지향하는 패러다임.

해당 위키는 우선적으로 JavaScript를 기준으로 설명한다.

일급 객체와 일급 함수

개념 정의
일급 시민(First Class Citizen) 특정 언어에서 다른 객체들과 동등하게 취급되는 객체
일급 함수(First Class Function) 함수를 일급 시민으로 취급하는 것

자바스크립트에서의 함수형 프로그래밍

자바스크립트에서 함수형 프로그래밍이 적용될 수 있는 근본적 이유는 다음과 같다.

  1. 함수를 변수에 할당 가능하다.
  2. 다른 함수의 인수로 함수를 전달할 수 있다. (콜백)
  3. 함수가 함수를 반환하는 것이 가능하다. (클로저, 고차 함수)

위의 모든 것이 가능하다.

함수가 함수를 반환하는 특성 클로저는 고차 함수 및 커링의 기초가 된다. 이는 콜백 지옥을 유발하는 것 보다, 복잡한 비동기 흐름을 제어하고 추상화하는 FP의 매커니즘으로 활용된다.

정의

수학적 함수에 기반하여 동일한 입력에 대해 항상 동일한 출력을 보장하고 외부 상태를 변경하지 않는 순수 함수(Pure Function) 작성을 지향하는 패러다임.

핵심

  1. 순수 함수(Pure Function) : 동일 입력 -> 동일 출력 보장. 외부 상태에 의존하지 않으며, 외부 상태를 변경하지 않는다.
  2. 불변성(Immutability) : 데이터는 생성 후 변경될 수 없으며, 변화가 필요한 경우에는 반드시 새로운 데이터를 생성한다.
  3. 선언적 프로그래밍 : for 루프와 같은 "어떻게 동작한다" 대신, map, filter 처럼 무엇을 할 지 명시하는 코드를 작성한다.
  4. 고차 함수 : 다른 함수를 인수로 받거나 함수를 반환하는 함수.
  5. 함수 합성 : 여러 개의 작은 순수 함수를 결합하여 데이터 처리의 파이프라인을 구축하는 기법

이점

  1. 높은 예측 가능성 : 순수함수의 특성으로 코드의 동작을 신뢰하고 이해하기 쉽다.
  2. 디버깅 용이성 : 사이드 이펙트가 격리되어 오류 발생 지점 추적 및 수정 용이.
  3. 병렬 처리 용이성 : 외부 상태 의존성이 낮아 데이터 경쟁 조건을 방지하며, 동시성을 안전히 확보 가능
  4. 테스트 용이성 : 외부 의존성이 없는 순수 함수는 독립적인 유닛 테스트 수행에 적합하다.

여담

FE/BE 통합: 함수형 프로그래밍은 프론트엔드(React, Vue)와 백엔드(Node.js/NestJS) 모두 JavaScript를 사용하여 일관된 패러다임으로 개발할 수 있게 해준다.

Rust 및 Wasm: Rust와 같은 언어는 메모리 안정성을 통해 FP의 장점을 극대화하며, 이를 **WebAssembly (Wasm)**로 컴파일하여 CPU 집약적 작업을 안전하고 효율적으로 처리할 수 있다.

라이브러리: Lodash, Ramda와 같은 라이브러리는 FP 원칙에 따라 설계된 순수 함수를 제공하여, 개발자가 불변성을 쉽게 유지하며 복잡한 데이터 처리를 수행하도록 돕는다.

Todo

클로저 추가.