함수형 프로그래밍은 계산을 수학적 함수의 평가로 간주하고 상태와 가변 데이터를 피하는 프로그래밍 패러다임이다. 명령형 프로그래밍이 프로그램의 상태를 변경하는 문(Statement) 중심인 것과 달리, 함수형 프로그래밍은 식(Expression)과 선언을 강조하는 선언형 프로그래밍의 일종이다. 1930년대 람다 대수에 뿌리를 두고 있으며, 현대에는 병렬 처리의 안정성과 데이터 파이프라인 구축의 효율성 덕분에 백엔드 개발 및 빅데이터 처리 분야에서 중요하게 다루어진다.

배너 광고

개요 및 역사

함수형 프로그래밍은 1930년대 알론조 처치가 개발한 형식 체계인 람다 대수에 근간을 둔다. 1958년 존 매카시가 최초의 함수형 프로그래밍 언어인 LISP를 개발한 이후, 학계와 산업계에서 꾸준히 발전하였다.

초기에는 주로 학술적 연구에 활용되었으나, 최근 AI, 빅데이터, 클라우드 컴퓨팅의 확산으로 인해 방대한 데이터를 병렬적이고 안정적으로 처리할 필요성이 커지면서 다시 주목받고 있다. 함수형 프로그래밍은 명령형 프로그래밍과 달리 프로그램의 상태를 변경하는 대신 함수의 응용을 통해 결과를 도출하며, 이는 수학적 함수의 정의와 일치한다.

핵심 원칙

함수형 프로그래밍을 구성하는 주요 원칙은 다음과 같다.

  • 순수 함수 (Pure Function): 함수의 출력값이 오직 입력 인수에만 의존하며, 외부 상태를 변경하는 부수 효과(Side Effect)가 없는 함수다.
  • 불변성 (Immutability): 데이터는 한 번 생성되면 상태를 변경할 수 없다. 값을 수정하는 대신 새로운 데이터를 생성하여 반환하는 방식을 취한다.
  • 일급 함수 (First-class Function): 함수를 변수에 할당하거나, 인자로 전달하거나, 결과값으로 반환할 수 있는 일급 객체로 취급한다.
  • 참조 투명성 (Referential Transparency): 표현식이 그 값으로 대체되어도 프로그램의 동작이 변하지 않는 성질이다. 이는 순수 함수와 불변성에 의해 보장된다.

함수 합성 및 고차 함수

작은 함수들을 조합하여 복잡한 로직을 구성하는 것이 특징이다.

개념설명
고차 함수함수를 인자로 받거나 함수를 반환하는 함수 (예: map, filter, reduce)
함수 합성여러 함수를 연결하여 새로운 함수를 만드는 과정
커링 (Currying)여러 개의 인자를 가진 함수를 단일 인자를 받는 함수들의 체인으로 변환하는 기법
부분 적용함수의 인자 중 일부를 미리 고정하여 새로운 함수를 생성하는 방식

고차 함수는 데이터 컬렉션을 처리할 때 특히 유용하며, 반복문 대신 선언적인 방식으로 데이터 변환을 표현할 수 있게 한다.

타입 시스템과 모나드

함수형 프로그래밍은 강력한 타입 시스템을 통해 프로그램의 안정성을 높인다. **대수적 데이터 타입(ADT)**과 패턴 매칭을 사용하여 데이터 구조를 명확히 정의하고 처리한다.

특히 **모나드(Monad)**는 부수 효과가 있는 계산을 순수 함수적 맥락에서 안전하게 다루기 위한 컨테이너 구조로 활용된다. 대표적으로 값이 없을 수 있는 상황을 다루는 Maybe나 에러 처리를 위한 Either/Result 모나드가 있다. 모나드는 함수 합성의 일반화된 패턴을 제공하여 입출력, 예외, 상태 등의 부수 효과를 순수 함수처럼 다룰 수 있게 한다.

주요 함수형 프로그래밍 언어

다양한 함수형 프로그래밍 언어가 존재하며, 각 언어는 고유한 특징을 가진다.

  • LISP: 최초의 함수형 언어로, 동적 타이핑과 강력한 매크로 시스템을 갖추고 있다.
  • 하스켈 (Haskell): 순수 함수형 언어로, 게으른 평가(Lazy Evaluation)와 강력한 정적 타입 시스템이 특징이다.
  • 얼랭 (Erlang): 동시성 및 분산 시스템에 특화되어 있으며 액터 모델을 기반으로 한다.
  • 스칼라 (Scala): 객체지향과 함수형 패러다임을 혼합한 언어로 JVM 위에서 동작한다.
  • 클로저 (Clojure): LISP 계열의 현대적 언어로 불변 데이터 구조를 강조한다.

이 외에도 OCaml, F# 등이 있으며, 자바스크립트, 파이썬, 자바, 스위프트 같은 범용 언어들도 함수형 프로그래밍의 요소들을 적극적으로 도입하고 있다.

현대적 의의와 장점

현대 소프트웨어 개발에서 함수형 프로그래밍은 다음과 같은 이점을 제공한다.

  1. 테스트 용이성: 순수 함수는 외부 의존성이 없어 입력과 출력만으로 검증이 가능하다.
  2. 동시성 안전: 데이터가 불변이므로 여러 스레드에서 공유하더라도 데이터 경합이나 락(Lock) 문제가 발생하지 않는다.
  3. 유지보수성: 선언적인 코드 작성을 통해 로직의 의도를 명확히 파악할 수 있으며, 작은 단위의 함수 재사용이 용이하다.
  4. 예측 가능성: 참조 투명성으로 인해 코드의 동작을 이해하고 예측하기 쉽다.

참고 자료

5
함수형 프로그래밍함수형 프로그래밍 함수형 프로그래밍(函數型 프로그래밍,영어: functional programming)은 자료 처리를수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는프로그래밍 패러다임의 하나이다.명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 프…https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D함수형 프로그래밍 입문함수형 프로그래밍 입문 --- 이 글을 시작으로 총 네 개의 글을 통해 기초적인 함수형 프로그래밍에 대하여 다루려고 한다. 함수형 프로그래밍을 지금까지 접해보지 않은 사람은 네 글을 모두 차근차근 읽는 것이 앞으로 프로그래밍 언어 과목에서 과제를 하는 데 도움이 될 것이다. 반대로, 프로그래밍의 이해 과목을 수강한 사람…https://hjaem.info/articles/kr_3_1함수형 프로그래밍이란? 예제가 있는 튜토리얼함수형 프로그래밍이란? 예제가 있는 튜토리얼 ## 함수형 프로그래밍이란? 함수형 프로그래밍(FP라고도 함)은 순수 함수를 생성하여 소프트웨어 구축을 생각하는 방식입니다. 객체 지향 프로그래밍에서 관찰되는 공유 상태, 변경 가능한 데이터 개념을 피합니다. 함수형 언어는 문장의 실행보다는 표현식과 선언을 강조합니다. 따라서…https://guru99.com/ko/functional-programming-tutorial.html함수형 프로그래밍(FP)이란?함수형 프로그래밍(FP)이란? 로그인 로그인 # 함수형 프로그래밍(FP)이란? o_jooon_·2024년 2월 26일 팔로우 1 ## CS 목록 보기 5/8 지난 번에 포스팅 했던 객체 지향 프로그래밍(OOP)에 이어, 이번 포스팅은 함수형 프로그래밍(FP)에 관한 글입니다. iOS 개발을 위해 Swift를 사용하다보니…https://velog.io/@o_joon_/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DFP기존의 사고 방식을 깨부수는 함수형 사고기존의 사고 방식을 깨부수는 함수형 사고 최근 많은 언어들이 함수형 프로그래밍 패러다임을 도입하며, 이에 대한 개발자들의 관심 또한 나날히 높아지고 있다. 필자 또한 “함수형 사고”라는 책을 읽으면서 기존의 패러다임과 사뭇 다른 함수형 프로그래밍에 대해 많은 관심을 가지게 되었던 기억이 있다. 재밌어서 여러 번 읽고 있…https://evan-moon.github.io/2019/12/15/about-functional-thinking/

관련 문서