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

함수의 스코프와 클로저는 파이썬 프로그래밍에서 중요한 개념입니다. 이러한 개념을 이해하면 코드의 유지보수성과 모듈성을 높일 수 있습니다.

스코프 (Scope)

스코프는 변수의 유효 범위를 의미하며, 변수가 존재하는 영역입니다. 파이썬에서는 LEGB 규칙을 따라 스코프가 결정됩니다.

def example():
    local_var = 10
    
    def inner_example():
        enclosing_var = 20
        print(local_var)  # Local scope에서 정의된 변수에 접근 가능
        print(enclosing_var)  # Enclosing scope에서 정의된 변수에 접근 가능

    inner_example()
    print(local_var)  # Local scope에서 정의된 변수에 접근 가능
    # print(enclosing_var)  # 오류! Enclosing scope의 변수는 함수 내부에서만 접근 가능

example()

위의 예시 코드에서 inner_example 함수는 example 함수의 내부에서 정의되었습니다. 따라서 inner_example 함수는 enclosing scope에서 local_var 변수에 접근할 수 있습니다. 하지만 반대로 example 함수는 inner_example 함수의 enclosing scope에 접근할 수 없습니다.

클로저 (Closure)

클로저는 내부 함수가 외부 함수의 변수를 참조하고 있을 때, 외부 함수가 실행을 마치고 소멸되어도 내부 함수가 외부 함수의 변수를 기억하고 있는 것을 말합니다. 이를 통해 함수를 만들어서 나중에 사용할 수 있습니다.

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

closure_example = outer_function(10)
print(closure_example(5))  # 15

위의 예시 코드에서 outer_function 함수는 내부에 inner_function 함수를 정의하고, inner_function 함수를 반환합니다. inner_function 함수는 외부 함수에서 선언된 x 변수를 참조하고 있으므로 클로저입니다. 이렇게 반환된 closure_example 함수는 나중에 호출하여 x 값을 사용할 수 있게 됩니다.

클로저는 주로 콜백 함수나 데코레이터 등 다양한 곳에서 활용됩니다. 변수의 생명주기를 관리하고, 데이터 은닉과 같은 효과를 얻을 수 있습니다.


함수의 스코프와 클로저는 파이썬에서 다양한 유형의 프로그래밍 작업에 활용됩니다. 이러한 개념을 잘 이해하고 활용하면 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 프로그래밍에서 복잡성을 관리하고 효율적인 코드를 작성하기 위해 스코프와 클로저를 주의깊게 다뤄봅시다.