55 lines
4.4 KiB
Markdown
55 lines
4.4 KiB
Markdown
---
|
|
category: Unified
|
|
tags: [auto-consolidated, technical-documentation]
|
|
title: [[Functional Programming|Functional Programming]]
|
|
last_updated: 2026-05-02
|
|
---
|
|
|
|
# [[Functional Programming|Functional Programming]]
|
|
|
|
## 📌 Brief Summary
|
|
> "상태 변화 없는 수학적 흐름: 데이터를 직접 수정(Mutation)하지 않고, 입력에 대해 항상 같은 결과를 내놓는 순수 함수(Pure Function)들의 조합으로 안정성 있고 예측 가능한 소프트웨어를 건축하는 프로그래밍 철학."
|
|
|
|
---
|
|
|
|
> "데이터의 상태 변화를 피하고, 순수 함수들의 조합으로 견고한 로직을 조립하라" — 계산을 수학적 함수의 평가로 취급하고 상태 변경 및 가변 데이터를 멀리하여, 병렬 처리에 유리하고 버그가 적은 소프트웨어를 만드는 프로그래밍 패러다임.
|
|
|
|
## 📖 Core Content
|
|
함수형 프로그래밍(Functional Programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다.
|
|
|
|
1. **핵심 원칙**:
|
|
* **Immutability (불변성)**: 한번 생성된 데이터는 바꾸지 않고, 변화가 필요하면 새로운 데이터를 만듦. (멀티코어 환경의 안전성 확보)
|
|
* **Pure Functions**: 외부 상태에 의존하지 않고 오직 입력으로만 결과를 냄 (Side effect 제거).
|
|
* **Higher-Order Functions**: 함수를 값처럼 주고받아 로직의 결합과 재사용성을 극대화 (Map, Filter, Reduce).
|
|
2. **왜 중요한가?**:
|
|
* 코드가 간결해지고 테스트가 압도적으로 쉬워지며, 분산 컴퓨팅([[Distributed-Systems|Distributed-Systems]]) 환경에서 데이터 일관성을 지키기에 최적임.
|
|
|
|
---
|
|
|
|
- **추출된 패턴:** "어떻게(How)" 연산할지보다 "무엇(What)"인지 정의하고, 입력을 넣으면 항상 동일한 출력이 나오는 불변성(Immutability)과 참조 투명성(Referential Transparency)을 유지하는 선언적 코딩 패턴.
|
|
- **핵심 개념:**
|
|
- **Pure Functions:** 외부 상태를 참조하거나 변경하지 않는 함수. 테스트와 디버깅이 매우 쉬움.
|
|
- **First-class Citizens:** 함수를 변수에 담고, 인자로 넘기고, 결과로 반환할 수 있음.
|
|
- **Higher-order Functions:** 함수를 파라미터로 받거나 결과로 반환하는 함수 (map, filter, reduce 등).
|
|
- **Immutability:** 한 번 생성된 데이터는 수정하지 않고 항상 새로운 데이터를 생성하여 전달.
|
|
- **의의:** 동시성(Concurrency) 문제가 발생하는 멀티코어 환경과 대규모 분산 시스템에서 데이터 일관성을 유지하는 가장 강력한 무기.
|
|
|
|
## ⚖️ Trade-offs & Caveats
|
|
- **과거 데이터와의 충돌**: 과거에는 하드웨어 자원 낭비(복사 비용 등) 때문에 '명령형/객체지향 정책'이 압승했으나, 현대 정책은 병렬 연산의 중요성과 소프트웨어 복잡성 해결 정책 때문에 모든 주류 언어가 함수형 특징을 도입하는 '하이브리드 함용 정책'으로 승리함(RL Update).
|
|
- **정책 변화(RL Update)**: 거대 데이터 파이프라인 정책과 AI 모델의 레이어 연산 정책 자체가 거대한 함수 체인(Functional Chain) 정책으로 설계되어 있으며, 이를 선언적으로 다루는 능력이 현대 개발의 필수 정책이 됨.
|
|
|
|
---
|
|
|
|
- **과거 데이터와의 충돌:** 객체지향(OOP)이 유일한 정답이던 시대를 지나, 데이터 스트림 처리와 비동기 프로그래밍이 중요해지면서 함수형 패러다임이 모든 주류 언어(JS, Java, Python 등)에 깊숙이 침투함.
|
|
- **정책 변화:** Antigravity 프로젝트는 에이전트의 사고 흐름(Chain of Thought)을 처리하는 파이프라인 설계 시, 각 단계를 순수 함수로 정의하여 재현 가능성과 안정성을 확보함.
|
|
|
|
## 🔗 Knowledge Connections
|
|
- [[클린 아키텍처 (Clean Architecture)|Clean-[[Architecture]]-TypeScript]], [[Distributed-Systems|Distributed-Systems]], [[Concurrent Programming|Concurrent Programming]], [[Logic|Logic]], [[Optimization|Optimization]]
|
|
- **Modern Tech/Tools**: Haskell, Elixir, React (Functional Components), Rust, Ramda.js.
|
|
---
|
|
|
|
---
|
|
|
|
- [[Determinism-in-Computing|Determinism-in-Computing]], [[Distributed-Computing|Distributed-Computing]], Software-Architecture-Patterns, [[Parallel-Computing|Parallel-Computing]]
|
|
- **Raw Source:** 10_Wiki/Topics/AI/Functional-Programming.md
|