순수 함수와 불변 데이터는 함수형 프로그래밍에서 중요한 개념입니다. 이 개념들은 함수형 프로그래밍의 핵심 원칙 중 하나인 “부작용(side effect)을 최소화하는” 것을 지향합니다.
순수 함수(Pure Function)
순수 함수는 같은 입력에 대해 항상 동일한 출력을 반환하는 함수입니다. 이 함수는 주어진 인자를 변경하지 않으며, 외부 상태에 영향을 주지 않습니다. 다른 말로, 내부적인 상태나 외부의 상태에 의존하지 않고 독립적으로 동작합니다.
순수 함수의 특징:
- 동일한 입력에 대해 항상 동일한 결과를 반환합니다.
- 외부 상태에 영향을 주지 않으며, 외부 상태도 변경하지 않습니다.
- 부작용이 없으므로 코드의 예측 가능성과 테스트 용이성이 향상됩니다.
순수 함수의 예시를 살펴보겠습니다.
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 출력: 8
위의 예시에서 add
함수는 동일한 입력 3
과 5
에 대해 항상 같은 결과 8
을 반환합니다. 또한, 외부 상태에는 영향을 주지 않으므로 예측 가능하고 테스트하기 쉬운 함수입니다.
불변 데이터(Immutable Data)
불변 데이터는 생성 이후에 변경되지 않는 데이터입니다. 즉, 한 번 생성된 데이터는 그 값을 변경할 수 없습니다. 이와 반대로, 가변 데이터는 값을 변경할 수 있습니다.
불변 데이터의 특징:
- 한 번 생성된 데이터는 변경할 수 없으므로 예기치 않은 수정이 발생하지 않습니다.
- 데이터 공유가 가능하며, 데이터의 복사가 필요하지 않습니다.
- 다중 스레드 환경에서 안전하게 사용할 수 있습니다.
파이썬에서는 불변 데이터로 정수(int
), 부동 소수점(float
), 문자열(str
), 튜플(tuple
) 등을 제공합니다. 이러한 불변 데이터를 사용하면 순수 함수를 구현하는 데 매우 유용합니다.
불변 데이터를 사용한 예시를 살펴보겠습니다.
name = "John"
greeting = "Hello, " + name
print(greeting) # 출력: Hello, John
name = "Jane" # name을 변경하더라도 greeting에는 영향을 주지 않습니다.
print(greeting) # 출력: Hello, John
위의 예시에서 문자열 greeting
은 초기에 생성된 "Hello, John"
값으로 고정되어 있습니다. name
값을 변경하더라도 greeting
값은 변하지 않습니다.
정리
순수 함수와 불변 데이터는 함수형 프로그래밍의 핵심 원칙을 구현하는 데 중요한 역할을 합니다. 순수 함수는 입력에 대해 항상 동일한 결과를 반환하며, 외부 상태에 영향을 주지 않습니다. 불변 데이터는 변경이 불가능하므로 예측 가능성과 코드의 안정성을 높이는데 도움을 줍니다. 이러한 개념을 활용하여 함수형 프로그래밍의 장점을 누릴 수 있습니다.