Learning
토픽 136 / 192·프로그래밍 패러다임

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

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

수학적 함수의 개념에 기반하여 순수 함수(Pure Function)의 조합으로 프로그램을 구성하는 패러다임으로, 상태 변이를 최소화하고 불변 데이터를 통해 부작용 없는 코드를 지향

목적: 부작용 제거, 예측 가능한 코드, 병렬 처리 용이, 테스트 용이, 수학적 검증 가능

핵심 개념

  • 순수 함수(Pure Function): 같은 입력→항상 같은 출력, 부작용 없음, 참조 투명성
  • 불변성(Immutability): 데이터 변경 불가, 새 데이터 생성, 동시성 안전
  • 고차 함수(Higher-Order Function): 함수를 인자로 받거나 반환, map/filter/reduce
  • 일급 함수(First-Class Function): 함수를 값처럼 변수 할당·전달·반환
  • 클로저(Closure): 외부 스코프 변수를 캡처하는 함수
  • 커링(Currying): 다인자 함수→단일 인자 함수 체인, 부분 적용(Partial Application)
  • 모나드(Monad): 부작용을 타입으로 감싸 순수성 유지, Maybe/Either/IO, 체이닝(bind/flatMap)
  • 패턴 매칭(Pattern Matching): 데이터 구조 분해+조건 분기, switch 대체

함수형 기법 in OOP 언어

  • Java: Stream API, Lambda, Optional, CompletableFuture
  • Kotlin: 확장함수, data class(불변), 고차함수, 시퀀스
  • Python: lambda, map/filter/reduce, functools, 제너레이터
  • JavaScript: Array.map/filter/reduce, 화살표 함수, Promise

장점: 테스트 용이(순수함수), 병렬 처리 안전(불변), 간결한 코드, 수학적 증명 가능, 버그 감소

단점: 학습 곡선(모나드 등), 성능 오버헤드(불변 데이터 복사), I/O 처리 복잡, 디버깅 어려움(지연 평가)

주요 언어: Haskell(순수FP), Scala(FP+OOP), Clojure(Lisp계열/JVM), Elixir(Actor+FP), F#(.NET FP), Erlang(동시성+FP)

비교: FP(순수함수/불변/Haskell) vs OOP(객체/상태변화/Java) vs 절차적(순차/변수/C)

연관: 프로그래밍 패러다임, 람다 대수, 모나드, 불변 자료구조, 리액티브 프로그래밍