본문 바로가기
Coding Study/FrontEnd Study Note

함수형 프로그래밍

by bell_one 2026. 2. 23.

1. 정의

함수형 프로그래밍(Functional Programming, FP)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다. 객체지향 프로그래밍(OOP)이 객체들의 상태와 상호작용 중심으로 로직을 구성한다면, 함수형 프로그래밍은 독립적이고 예측 가능한 함수들의 조합으로만 애플리케이션 로직을 구성합니다.

2. 핵심 원칙

A. 순수 함수 (Pure Functions) 동일한 입력이 주어지면 항상 동일한 출력을 반환하며, 외부의 상태를 변경하거나 외부 상태에 의존하지 않는 함수입니다. 사이드 이펙트(Side Effect: API 호출, 전역 변수 수정, DOM 조작 등)가 함수 내부에 없으므로 실행 결과를 100% 예측할 수 있습니다.

B. 불변성 (Immutability) 데이터가 한 번 생성되면 그 상태를 절대 변경할 수 없는 성질입니다. 데이터를 수정해야 할 때는 원본 데이터를 직접 조작하는 대신, 변경된 새로운 데이터 복사본을 생성하여 반환합니다. 이를 통해 참조 상태 변화로 인한 버그를 원천 차단합니다.

C. 일급 객체와 고차 함수 (First-class and Higher-order Functions) 함수를 일반 값처럼 취급하여 변수에 할당하거나, 다른 함수의 인자로 전달하고, 함수의 반환값으로 사용할 수 있습니다. 고차 함수는 하나 이상의 함수를 인자로 받거나 함수를 반환하는 함수를 뜻하며, 자바스크립트의 map, filter, reduce가 대표적인 예시입니다.

D. 선언형 프로그래밍 (Declarative Programming) '어떻게(How)' 데이터를 처리할 것인지 제어 흐름을 명시하기보다, '무엇을(What)' 할 것인지 목적을 명시합니다. for 문이나 while 문을 사용하여 인덱스를 직접 제어하는 명령형 방식 대신, 내장된 추상화 함수를 사용하여 코드를 간결하게 작성합니다.

3. 장점

  • 테스트와 디버깅 용이성: 순수 함수는 외부 상태에 의존하지 않으므로, 유닛 테스트를 작성할 때 모킹(Mocking)을 최소화할 수 있고 디버깅이 직관적입니다.
  • 동시성(Concurrency) 처리 안전성: 데이터의 불변성을 유지하므로 여러 스레드에서 동시에 같은 데이터에 접근하더라도 교착 상태나 데이터 오염 문제가 발생하지 않습니다.
  • 코드 재사용성과 모듈화: 작은 단위의 독립적인 함수들을 결합하여 복잡한 로직을 구현하므로, 작성된 함수를 다른 모듈에서 쉽게 재사용할 수 있습니다.

4. 단점

  • 학습 곡선: 상태를 변경하지 않고 로직을 처리해야 하므로, 객체지향이나 명령형 프로그래밍에 익숙한 상태라면 패러다임 전환 자체에 시간이 오래 걸립니다.
  • 성능 및 메모리 오버헤드: 값을 수정할 때마다 새로운 객체나 배열을 생성해야 하므로, 메모리 사용량이 증가하고 가비지 컬렉션(GC) 비용이 발생할 수 있습니다.
  • 상태 관리의 분리: 실제 프론트엔드 애플리케이션에서는 UI 업데이트나 API 호출 같은 사이드 이펙트 처리가 필수적이므로, 순수 함수 영역과 사이드 이펙트 영역을 완벽하게 분리하여 설계하는 과정이 까다롭습니다.

'Coding Study > FrontEnd Study Note' 카테고리의 다른 글

동적 타입 언어와 정적 타입 언어  (0) 2026.02.23
Core Web Vitals란?  (0) 2026.02.23
dvh, svh, lvh  (0) 2026.02.23
브라우저 메모리 캐시와 디스크 캐시  (0) 2026.02.10
Cache-Control 헤더  (0) 2026.02.10