[파이썬][리스트] 리스트의 함수형 프로그래밍의 개념과 함께 사용하여 불변성과 함수 조합을 활용하는 방법과 예제

함수형 프로그래밍은 함수를 일급 객체로 다루고, 불변성(Immutability)을 중요시하는 프로그래밍 패러다임입니다. 리스트를 사용하여 함수형 프로그래밍의 개념을 적용하고 불변성과 함수 조합을 활용하는 방법을 살펴보겠습니다.

불변성(Immutability)의 개념:

불변성은 데이터가 생성된 후 변경할 수 없음을 의미합니다. 리스트의 요소를 변경하려는 대신, 새로운 리스트를 생성하거나 함수를 사용하여 원래 리스트를 변경하지 않고 새로운 리스트를 반환합니다. 이로써 부작용(side effect)을 최소화하고 코드를 더 예측 가능하게 만듭니다.

함수 조합(Function Composition):

함수 조합은 여러 함수를 연결하여 새로운 함수를 생성하는 기술입니다. 리스트와 함께 사용하면 데이터를 변환하거나 처리하는 과정을 여러 함수로 나누어 구현할 수 있습니다.

아래는 불변성과 함수 조합을 사용하여 리스트를 다루는 예제입니다.

# 불변성을 유지하며 리스트의 각 요소를 제곱하는 함수
def square_list(lst):
    return [x ** 2 for x in lst]

# 불변성을 유지하며 리스트의 각 요소를 필터링하는 함수
def filter_list(lst, predicate):
    return [x for x in lst if predicate(x)]

# 함수 조합: 불변성을 유지하며 리스트의 각 요소를 제곱한 뒤 필터링
def square_and_filter(lst):
    return filter_list(square_list(lst), lambda x: x % 2 == 0)

my_list = [1, 2, 3, 4, 5]

# 불변성 유지하며 제곱한 결과 출력
squared = square_list(my_list)
print(squared)  # 출력: [1, 4, 9, 16, 25]

# 불변성 유지하며 필터링한 결과 출력
filtered = filter_list(my_list, lambda x: x % 2 == 0)
print(filtered)  # 출력: [2, 4]

# 함수 조합을 사용하여 불변성 유지하며 제곱 후 필터링한 결과 출력
result = square_and_filter(my_list)
print(result)  # 출력: [4, 16]

위의 예제에서는 square_list, filter_list 함수를 정의하여 불변성을 유지하며 리스트를 변환하고, square_and_filter 함수를 사용하여 이러한 함수를 조합하여 새로운 변환을 수행했습니다. 이렇게 함수를 조합하면 코드가 모듈화되고 유지보수가 용이해집니다.

함수형 프로그래밍과 불변성은 코드를 더 견고하고 예측 가능하게 만들며, 코드의 품질을 향상시키는 데 도움이 됩니다. 함수형 프로그래밍의 개념을 익히고 리스트와 함께 사용하면 파이썬 코드를 더욱 간결하고 효율적으로 작성할 수 있습니다.