[파이썬] 함수의 클로저와 스코프 체인

함수의 클로저(closure)와 스코프 체인(scope chain)은 파이썬에서 중요한 개념입니다. 클로저는 함수가 생성될 때, 그 함수와 함수가 정의된 환경(스코프)의 조합을 가리키며, 스코프 체인은 함수가 정의된 환경과 그 부모 환경들의 연결된 체인을 의미합니다. 이 두 개념을 이해하면 코드 작성과 디버깅을 더욱 쉽게 할 수 있습니다.

클로저(Closure)

클로저란 함수와 함수가 정의된 환경의 조합을 의미합니다. 즉, 함수 내에서 정의한 내부 함수가 외부 함수에 대한 참조를 유지하는 것을 말합니다.

클로저의 한가지 활용은 외부 함수 안에 내부 함수를 정의하고, 이 내부 함수에서 외부 함수의 변수를 계속해서 사용하는 것입니다. 이를 통해 외부 함수의 변수는 내부 함수가 소멸될 때까지 유지되어 계속해서 사용할 수 있습니다.

아래는 클로저의 예시 코드입니다.

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

closure = outer_function(10)
result = closure(5)
print(result)  # 출력 결과: 15

위 예시에서 outer_functioninner_function을 반환하고 있습니다. inner_functionx 변수를 사용하여 계산을 수행하는 클로저입니다.

closure = outer_function(10) 코드를 통해 closure 변수는 outer_function에서 반환된 inner_function을 가리키는 클로저가 됩니다. 따라서 closure를 호출하면 inner_function이 실행되면서 외부 함수인 outer_function에서 정의된 변수 x에 접근하여 계산을 수행합니다.

스코프 체인(Scope Chain)

스코프 체인은 함수가 정의된 환경과 그 부모 환경들의 연결된 체인을 의미합니다. 파이썬에서 함수가 호출될 때, 해당 함수의 내부 스코프와 외부 스코프들이 연결되어 하나의 스코프 체인을 형성합니다.

스코프 체인은 변수 조회(Variable Lookup) 시 사용됩니다. 변수를 찾을 때, 현재 스코프부터 시작하여 상위 스코프로 이동하며 변수를 찾게 됩니다. 만약 상위 스코프에서 변수를 찾을 수 없다면, 계속해서 상위 스코프로 이동하여 찾게 됩니다. 이러한 방식으로 변수를 찾는 것을 스코프 체인을 따라 변수를 참조한다고 말합니다.

아래는 스코프 체인의 예시 코드입니다.

def outer_function():
    x = 10
    def inner_function():
        print(x)
    return inner_function

closure = outer_function()
closure()  # 출력 결과: 10

위 예시에서 inner_functionx 변수를 사용하여 값을 출력하고 있습니다. 그런데 inner_function 안에 x 변수가 정의되어 있지 않습니다. 따라서 x 변수를 찾기 위해서 스코프 체인을 따라 부모(상위) 스코프인 outer_function으로 이동하여 x 변수를 찾아 출력하게 됩니다.

마무리

함수의 클로저와 스코프 체인은 파이썬에서 중요한 개념이며, 코드 작성과 이해에 큰 도움을 줍니다. 클로저를 활용하면 유지해야 하는 변수를 간편하게 다룰 수 있고, 스코프 체인을 이용하여 변수를 참조할 때 어떻게 값을 가져오는지 이해할 수 있습니다. 이러한 개념을 숙지하면 파이썬 코드를 효율적으로 작성하고 디버깅하는 데 도움이 될 것입니다.