Files
python-examples/doc/17_functional_programming.md
2025-01-20 02:26:20 +09:00

69 lines
3.4 KiB
Markdown

# 함수형 프로그래밍(Functional Programming)
함수형 프로그래밍은 데이터를 처리하는 것을 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다. 즉, 함수를 하나의 값으로 취급하고, 함수의 입력값에 따라 항상 같은 출력값을 내는 순수 함수를 지향합니다.
## 함수형 프로그래밍의 핵심 개념
* 순수 함수:
- 함수 외부의 상태를 변경하지 않습니다.
- 같은 입력값에 대해 항상 같은 출력값을 반환합니다.
- 부수 효과가 없습니다.
* 불변성: 데이터를 변경하는 대신 새로운 데이터를 생성합니다.
* 고차 함수: 함수를 인자로 받거나 함수를 반환하는 함수입니다.
* 일급 시민: 함수를 변수에 할당하고, 다른 함수의 인자로 전달하고, 반환값으로 사용할 수 있습니다.
## 함수형 프로그래밍의 장점
* 코드의 가독성 향상: 순수 함수를 사용하여 코드를 간결하고 명확하게 작성할 수 있습니다.
* 테스트 용이성: 순수 함수는 입력값에 대한 출력값이 항상 일정하기 때문에 테스트하기 쉽습니다.
* 병렬 처리: 순수 함수는 부수 효과가 없기 때문에 병렬 처리에 적합합니다.
* 재사용성: 잘 정의된 함수를 재사용하여 코드를 효율적으로 작성할 수 있습니다.
## 함수형 프로그래밍과 연관된 함수
### map
주어진 함수를 반복 가능한 객체(리스트, 튜플 등)의 모든 요소에 적용하여 새로운 이터레이터를 반환합니다.
```python
map(function, iterable)
```
```python
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
```
위 예시에서 map 함수는 각 숫자를 제곱하는 람다 함수를 numbers 리스트의 모든 요소에 적용하여 새로운 리스트 squared를 생성합니다.
### filter
주어진 함수를 사용하여 반복 가능한 객체의 요소를 필터링합니다. 함수가 True를 반환하는 요소만 새로운 이터레이터에 포함됩니다.
```python
filter(function, iterable)
```
```python
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
```
위 예시에서 filter 함수는 numbers 리스트에서 짝수만 필터링하여 새로운 리스트 even_numbers를 생성합니다.
### reduce
시퀀스의 요소들을 누적적으로 처리하여 단일 값을 반환합니다. functools 모듈에서 제공됩니다.
```python
functools.reduce(function, iterable, initializer=None)
```
```python
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers) # 1 * 2 * 3 * 4 = 24
```
> map, filter 함수는 파이썬 2와 3에서 동작 방식이 약간 다릅니다. 파이썬 3에서는 결과가 바로 리스트로 반환되지 않고 이터레이터를 반환하므로, 리스트로 변환하여 사용해야 합니다.
### 람다 함수와의 조합
map, filter 함수는 람다 함수와 함께 자주 사용됩니다. 람다 함수는 간결하게 함수를 정의할 수 있기 때문에 이러한 고차 함수와의 조합이 매우 효율적입니다.
```python
numbers = [1, 2, 3, 4, 5]
# 숫자를 제곱하는 함수
def square(x):
return x * x
# map 함수를 사용하여 각 숫자를 제곱
squared_numbers = list(map(square, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
```