함수형 프로그래밍은 수학적 함수의 개념에 기반한 프로그래밍 패러다임으로, 프로그램을 함수의 조합으로 구성하는 것을 강조합니다. 함수형 프로그래밍의 주요 특징과 원칙에 대해 자세히 설명드리겠습니다.
주요 특징
- 순수 함수 (Pure Function):
- 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 함수 외부의 상태나 변수에 의존하지 않습니다. 또한, 함수 실행의 부작용(side effect)이 없습니다.
- 예를 들어, f(x) = x + 2는 순수 함수입니다. 입력 x가 같다면 항상 출력도 같습니다.
- 불변성 (Immutability):
- 함수형 프로그래밍에서는 데이터가 불변(immutable)입니다. 데이터를 변경하는 대신, 변경된 사본을 만듭니다.
- 이는 프로그램의 예측 가능성을 높이고, 디버깅을 쉽게 만듭니다.
- 고차 함수 (Higher-order Function):
- 함수형 프로그래밍에서는 함수를 일급 객체(first-class citizen)로 다룹니다. 즉, 함수를 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있습니다.
- 예를 들어, map, filter, reduce와 같은 함수들은 다른 함수를 인자로 받아서 작동합니다.
- 함수 합성 (Function Composition):
- 작은 함수들을 조합하여 더 복잡한 함수를 만들 수 있습니다. 이는 재사용성과 모듈성을 높이는 데 도움이 됩니다.
- 예를 들어, h(x) = f(g(x))와 같이 함수 f와 g를 합성하여 새로운 함수 h를 만들 수 있습니다.
- 지연 평가 (Lazy Evaluation):
- 함수형 프로그래밍 언어는 필요할 때까지 표현식을 평가하지 않는 지연 평가(lazy evaluation)를 지원할 수 있습니다.
- 이는 성능 최적화와 메모리 사용량 감소에 도움이 됩니다.
주요 개념
- First-Class Functions:
- 함수형 프로그래밍에서 함수는 다른 데이터 타입처럼 변수에 저장될 수 있고, 함수의 인자로 전달되거나 반환될 수 있습니다.
- Recursion (재귀):
- 함수형 프로그래밍에서는 반복문 대신 재귀를 사용하여 반복적인 작업을 수행합니다.
- 재귀는 함수가 자기 자신을 호출하는 것을 의미합니다.
- Closures (클로저):
- 클로저는 함수와 그 함수가 선언될 때의 렉시컬 환경(Lexical Environment)의 조합입니다. 클로저는 함수가 선언된 환경을 기억하여, 함수가 그 환경 내의 변수에 접근할 수 있게 합니다.