개요
함수형 프로그래밍FP, Functional Programming은 상태 변화와 가변 데이터를 최소화하고, 순수 함수와 불변성을 강조하는 프로그래밍 패러다임이다.
OOP와의 비교
객체 지향 프로그래밍OOP, Object-Oriented Programming은 데이터와 그 데이터를 다루는 동작을 하나의 단위(객체)로 캡슐화하고, 다형성, 추상화 등을 통해 복잡한 시스템을 구조화한다.
객체와 그에 연결된 동작이 현실 세계의 개념이나 사물을 모방하도록 구성함으로써, 비유 기반 접근 방식metaphor-based approach을 사용한다
쉽게 말해, 현실 세계의 사물을 객체로 표현하고, 그런 객체들 간의 상호 작용을 통해 프로그램을 구성함으로써 현실 세계를 코드로 모델링하는 방식이다.
이런 관점에서 OOP에서 프로그램의 주요 구성 단위는 객체(데이터+기능)다.
반면 FP는 관점이 다르다.
FP에서 프로그램의 주요 구성 단위는 함수다. 문제 해결은 함수를 호출하고 조합하여 원하는 결과를 도출하는 방식으로 이루어진다.
특히, 상태의 변경을 지양한다는 것에서 OOP와 큰 차이를 보인다.
OOP는 객체에 메세지를 전달해 상태를 변경하도록 하지만, FP는 기존 데이터를 수정하지 않고, 항상 새로운 값을 만들어 반환하는 방식으로 동작한다.
주요 특징
순수 함수Pure functions
순수 함수란 입력 값이 동일하면 항상 동일한 결과를 반환하는 함수를 말한다.
외부 상태에 영향을 미치지 않고, 외부 상태로부터 영향을 받지도 않는다. 이를 통해 부작용Side Effect을 없애고 코드를 더욱 예측 가능하게 만든다.
참조 투명성Referential Transparency
순수 함수처럼 입력 값이 동일하면 항상 동일한 결과를 반환하는 성질을 참조 투명성이라고 한다.
같은 입력에 대해 항상 같은 출력을 반환하고, 부작용이 없어 언제든 값으로 대체해도 결과가 바뀌지 않으므로, 표현식을 값으로 바꿔도 프로그램의 의미나 동작이 바뀌지 않는다.
바꿔 말해, 참조 투명성을 만족하는 함수를 순수 함수라고 할 수 있다.
불변성Immutability
앞서 작성했듯, FP에서는 데이터의 상태를 변경하지 않고 새로운 데이터를 생성한다. 이를 통해 상태 변경으로 인한 버그 발생을 줄일 수 있다.
고차 함수Higher-order functions
고차 함수는 함수를 인자로 받거나 함수를 반환할 수 있는 함수다.
이 정의는 일급 함수First-class function와 유사한데, 실제로 모든 고차 함수는 일급 함수이다.
일급 함수와 고차 함수
우선 ‘일급 객체’에 대해 알아보자.
일급 객체first-class object란 이하 세 조건을 만족하는 객체를 말한다.
- 모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다.
- 모든 일급 객체는 함수의 파라미터로 전달할 수 있어야 한다.
- 모든 일급 객체는 함수의 리턴값으로 사용할 수 있어야 한다.
따라서 ‘일급 함수’란 ‘일급 객체의 요건을 만족하는 함수’를 말한다.1
즉, ‘일급 함수’는 “변수처럼 다룰 수 있다”는 일종의 성질이고, ‘고차 함수’는 “함수를 인자로 받거나 반환하는 함수”라는 일종의 분류이다.
그렇다면 함수를 인자로 받거나 반환하기 위해서는, ‘일급 함수’라는 성질을 만족해야 한다는 것이므로 모든 고차 함수는 일급 함수인 것이다.
참고자료
- gyoogle/tech-interview-for-developer, Functional Programming.md, 2024.02.15, https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Fuctional%20Programming.md
- 한빛, 객체 지향 프로그래밍과 함수형 프로그래밍의 원칙 비교, 2024.04.02, https://www.hanbit.co.kr/channel/view.html?cmscode=CMS5035317828
- 위키백과, 함수형 프로그래밍, 2025.04.04 11:18, 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
- velog.io/@clydehan, 함수형 프로그래밍 완벽 가이드: 선언형 코드 작성의 실전 적용볍, 2024.09.05, https://velog.io/@clydehan/함수형-프로그래밍-완벽-가이드-선언형-코드-작성의-실전-적용법
- 조연 블로그, [면접 꿀팁] 함수형 프로그래밍FunctionalProgramming이란?, 2023.03.31, https://thecho7.tistory.com/entry/%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DFunctional-Programming%EC%9D%B4%EB%9E%80
- Inpa Dev, 일급 객체(first-class object) 란?, 2022.12.23 09:33, https://inpa.tistory.com/entry/CS-%F0%9F%91%A8%E2%80%8D%F0%9F%92%BB-%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4first-class-object
- MDN Web Docs, 일급 함수, 2025.06,24, https://developer.mozilla.org/ko/docs/Glossary/First-class_Function
- 예사로운, 일급 객체(Fist-class citizen)과 고차 함수(Higher-order function), 2023.04.12, https://yesaroun.tistory.com/entry/%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4First-class-citizen%EA%B3%BC-%EA%B3%A0%EC%B0%A8-%ED%95%A8%EC%88%98Higher-order-function
Footnotes
-
MDN Web Docs에선 ‘함수들이 다른 변수들처럼 다뤄질 때’라고 간단하게 정의한다. ↩