본문 바로가기

프로그래밍 언어/파이썬

파이썬 함수형 프로그래밍 구현하기, 고차 함수와 불변성

파이썬에서 함수형 프로그래밍 구현하기, 고차 함수와 불변성

함수형 프로그래밍은 부수 효과를 최소화하고, 순수 함수를 활용하여 코드의 가독성과 유지보수성을 높이는 프로그래밍 패러다임입니다. 파이썬은 기본적으로 객체 지향 프로그래밍 언어로 알려져 있지만, 함수형 프로그래밍을 지원하는 다양한 기능을 제공합니다. 이 글에서는 파이썬에서 고차 함수와 불변성을 활용하여 함수형 프로그래밍을 구현하는 방법을 살펴보겠습니다.

 

 

 

1. 함수형 프로그래밍 개념 이해하기

함수형 프로그래밍은 수학적 함수를 모델로 한 프로그래밍 스타일입니다. 이 스타일은 상태 변화와 가변 데이터를 피하고, 순수 함수와 불변성을 강조합니다. 이를 통해 프로그램의 예측 가능성과 신뢰성을 높일 수 있습니다.

 

 

2. 고차 함수란 무엇인가?

고차 함수는 다른 함수를 인자로 받거나, 함수를 반환하는 함수입니다. 이는 함수를 데이터처럼 다룰 수 있게 해주며, 코드의 재사용성을 높이고, 더 간결하고 읽기 쉬운 코드를 작성할 수 있게 합니다.

 

 

3. 파이썬의 주요 고차 함수

파이썬에서 자주 사용되는 고차 함수로는 map, filter, reduce가 있습니다. 이들 함수는 리스트나 다른 반복 가능한 객체를 처리하는데 매우 유용합니다.

3.1 map 함수

map 함수는 주어진 함수와 반복 가능한 객체를 인자로 받아, 객체의 각 요소에 함수를 적용한 결과를 반환합니다.

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 출력: [1, 4, 9, 16]

3.2 filter 함수

filter 함수는 주어진 함수와 반복 가능한 객체를 인자로 받아, 함수의 조건을 만족하는 요소만을 반환합니다.

numbers = [1, 2, 3, 4]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 출력: [2, 4]

3.3 reduce 함수

reduce 함수는 주어진 함수와 반복 가능한 객체를 인자로 받아, 객체의 모든 요소를 하나의 값으로 축약합니다. 이 함수는 functools 모듈에서 제공됩니다.

from functools import reduce

numbers = [1, 2, 3, 4]
summed = reduce(lambda x, y: x + y, numbers)
print(summed)  # 출력: 10

 

 

 

 

4. 불변성과 데이터 처리

불변성은 함수형 프로그래밍의 중요한 개념 중 하나로, 데이터가 생성된 이후에는 변경되지 않음을 의미합니다. 이는 상태 변화를 피하고, 데이터의 일관성을 유지하는 데 도움이 됩니다.

파이썬에서 불변성을 유지하기 위해 튜플과 같은 불변 자료형을 사용할 수 있습니다. 예를 들어 리스트 대신 튜플을 사용하여 불변 데이터를 생성할 수 있습니다.

immutable_tuple = (1, 2, 3)
# immutable_tuple[0] = 0  # 이 줄은 에러를 발생시킵니다.

 

 

5. 실전 예제

함수형 프로그래밍의 개념을 바탕으로, 파이썬에서 고차 함수와 불변성을 활용한 실전 예제를 살펴보겠습니다. 다음 예제는 리스트의 요소를 제곱하고, 짝수만 필터링하며, 모든 요소를 더하는 과정을 보여줍니다.

from functools import reduce

numbers = [1, 2, 3, 4, 5, 6]

# 각 요소를 제곱합니다.
squared_numbers = list(map(lambda x: x**2, numbers))

# 짝수만 필터링합니다.
even_squared_numbers = list(filter(lambda x: x % 2 == 0, squared_numbers))

# 모든 요소를 더합니다.
sum_of_even_squared_numbers = reduce(lambda x, y: x + y, even_squared_numbers)

print(sum_of_even_squared_numbers)  # 출력: 56

이 예제는 고차 함수와 불변성을 활용하여 데이터 처리를 단순하고 직관적으로 구현하는 방법을 보여줍니다.