[python] 불변성을 유지하는 함수형 자료구조에 대해 설명해주세요.

함수형 프로그래밍에서는 불변성(Immutability)을 중요시 여깁니다. 불변성은 자료구조가 수정되지 않고 원본을 유지하며, 변경이 필요한 경우 새로운 자료구조를 생성하는 것을 의미합니다. 이러한 접근 방식은 코드의 예측 가능성과 안정성을 향상시키고, 버그의 가능성을 줄여줍니다.

불변성을 유지하는 자료구조는 함수형 프로그래밍에 대한 중요한 개념입니다. 다음은 불변성을 유지하는 함수형 자료구조의 예시입니다.

1. 튜플 (Tuple)

튜플은 변경할 수 없는 시퀀스 자료구조입니다. 튜플은 정의된 후에는 수정할 수 없기 때문에 불변성을 유지합니다. 다음은 튜플의 예시입니다.

point = (3, 4)  # (x, y) 좌표

튜플은 생성된 이후에는 수정할 수 없기 때문에, 값을 변경하려면 새로운 튜플을 생성해야 합니다.

2. 리스트 (List)

리스트는 변경 가능한 시퀀스 자료구조입니다. 하지만 함수형 프로그래밍에서 불변성을 유지하는 리스트를 사용하기도 합니다. 다음은 불변성을 유지하는 리스트의 예시입니다.

numbers = [1, 2, 3, 4, 5]
new_numbers = numbers + [6]  # 새로운 리스트 생성

위의 예제에서는 기존의 numbers 리스트와는 다른 new_numbers 리스트를 생성하여 값을 추가하였습니다. 이러한 방식으로 원본 리스트를 유지하고, 변경이 필요한 경우 새로운 리스트를 생성하여 사용합니다.

3. Set

Set은 중복된 값을 허용하지 않는 집합 자료구조입니다. Set 역시 불변성을 유지할 수 있습니다. 다음은 불변성을 유지하는 Set의 예시입니다.

fruits = frozenset(["apple", "banana", "orange"])  # 변경 불가능한 Set

frozenset 함수를 사용하여 변경이 불가능한 Set을 생성하였습니다. 이렇게 생성된 Set은 원본을 변경할 수 없기 때문에 불변성을 유지합니다.

4. Dict

Dict 역시 불변성을 유지할 수 있습니다. ImmutableDict 또는 frozendict와 같은 라이브러리를 사용하여 불변성을 갖는 Dict을 생성할 수 있습니다. 다음은 불변성을 유지하는 Dict의 예시입니다.

from frozendict import frozendict

person = frozendict({"name": "John", "age": 30})  # 변경 불가능한 Dict

frozendict 함수를 사용하여 변경이 불가능한 Dict을 생성하였습니다. 이처럼 Dict을 불변하게 유지함으로써 안정성을 향상시킬 수 있습니다.

결론

함수형 프로그래밍에서는 불변성을 유지하는 자료구조를 사용하여 코드의 안정성과 예측 가능성을 높입니다. 튜플, 리스트, Set, Dict 등 다양한 불변성 자료구조를 활용함으로써 코드의 버그를 줄이고, 유지보수성을 향상시킬 수 있습니다. 이러한 함수형 자료구조는 프로그래밍 언어에 따라 내장 함수나 외부 라이브러리를 통해 지원되는 경우도 있으니, 참고하여 사용하면 좋습니다.

참고 자료