[파이썬] 클로저를 통한 상태 저장

클로저는 함수와 그 함수가 선언된 환경의 조합입니다. 이는 상태를 저장하고 유지하기 위해 유용한 패턴입니다. 파이썬에서 클로저를 사용하여 상태를 저장하는 방법에 대해 알아보겠습니다.

클로저란?

클로저는 함수와 함수가 선언된 환경의 조합입니다. 함수가 선언된 위치에서 자유 변수에 대한 참조를 유지하며, 이로 인해 함수가 종료된 후에도 계속해서 상태를 유지할 수 있게 됩니다.

아래의 예제를 통해 클로저를 이해해 보겠습니다.

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

closure = outer_function(10)
print(closure(5))  # Output: 15

위의 코드에서 outer_functioninner_function을 반환합니다. 그리고 closureouter_function(10)에서 반환된 inner_function을 가리킵니다. 이렇게 클로저를 사용하면 closure를 호출할 때마다 outer_function의 환경에 있는 x값을 사용하여 결과를 계산합니다.

클로저를 통한 상태 저장

클로저를 사용하면 상태를 저장하고 유지할 수 있습니다. 예를 들어, 간단한 카운터를 구현해 보겠습니다.

def counter():
    count = 0

    def increment():
        nonlocal count
        count += 1
        return count

    return increment

counter1 = counter()
print(counter1())  # Output: 1
print(counter1())  # Output: 2

counter2 = counter()
print(counter2())  # Output: 1

위의 예제에서 counter 함수는 increment라는 클로저를 반환합니다. count 변수는 counter 함수 내에서 정의되고, increment 함수 내에서도 사용됩니다.

counter 함수를 호출하여 counter1counter2를 만들었습니다. 이제 counter1을 호출할 때마다 내부의 count 변수가 증가하고 결과를 반환합니다. 따라서 counter1()을 두 번 호출하면 12를 순서대로 반환합니다. 마찬가지로 counter2도 독립적인 상태를 유지하고, counter2()를 호출할 때마다 1을 반환합니다.

클로저를 통해 상태를 저장하는 것은 파이썬에서 매우 유용한 패턴입니다. 상태를 저장하기 위해서는 내부 함수에서 nonlocal 키워드를 사용하여 외부 함수의 변수에 접근해야 합니다.

마무리

클로저를 통해 상태를 저장하는 것은 파이썬에서 함수형 프로그래밍을 구현하는 강력한 도구입니다. 클로저를 이용해 상태를 유지할 수 있으며, 이는 많은 유즈케이스에서 유용하게 활용될 수 있습니다. 상태 유지의 필요성이 있는 경우, 클로저를 적절히 활용하여 코드를 단순화하고 가독성을 향상시킬 수 있습니다.

더 많은 클로저 활용 사례와 고급 기법에 대해 공부하고 싶다면 파이썬의 클로저에 대해 더 자세히 알아보는 것이 좋습니다.