2025-01-20T02:26:20
This commit is contained in:
69
doc/17_functional_programming.md
Normal file
69
doc/17_functional_programming.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# 함수형 프로그래밍(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]
|
||||
```
|
||||
Reference in New Issue
Block a user