본문 바로가기

Programming/python

python Scope Resolution(스코프 결정)에 대해서 알아보자

파이썬에서 스코프 결정(Scope Resolution)은 변수나 함수 등의 이름을 찾는 과정을 말합니다. 

즉, 코드에서 식별자(변수, 함수, 클래스 등)를 사용할 때 파이썬 인터프리터가 해당 식별자를 어떤 네임스페이스에서 찾는지 결정하는 과정을 의미합니다.

파이썬은 변수나 함수의 스코프를 기준으로 식별자를 찾습니다. 

 

파이썬에서는 크게 두 가지 스코프를 가집니다:

1. 전역 스코프(Global Scope):
   전역 스코프는 코드의 가장 바깥쪽에 정의된 변수, 함수, 클래스 등을 포함하는 스코프입니다. 

즉, 모듈 수준에서 정의된 식별자들은 해당 모듈의 전역 스코프에 속합니다. 전역 스코프에 정의된 식별자들은 모든 함수와 클래스에서 사용할 수 있습니다.

2. 지역 스코프(Local Scope):
   지역 스코프는 함수나 메서드 등의 내부에서 정의된 변수, 함수, 클래스 등을 포함하는 스코프입니다. 

함수 내에서 정의된 변수나 매개변수들은 해당 함수의 지역 스코프에 속하며, 이러한 식별자들은 함수 외부에서는 접근할 수 없습니다. 

함수 내에서만 유효한 변수들이지만, 함수 안에서 전역 변수를 사용하는 것은 가능합니다.

스코프 결정은 "LEGB 규칙"을 따릅니다:

- L(Local)

  지역 스코프 - 함수 내에 정의된 변수들을 찾습니다.
- E(Enclosing)

  감싸고 있는 함수의 스코프 - 중첩 함수일 경우, 바깥쪽 함수의 스코프를 확인합니다.
- G(Global) 

  전역 스코프 - 모듈 수준에서 정의된 변수들을 찾습니다.
- B(Built-in)

  내장 스코프 - 파이썬 내장 함수들의 스코프입니다.

예를 들어, 변수나 함수를 사용하는 코드에서 해당 식별자를 찾을 때, 먼저 지역 스코프에서 찾고, 없으면 감싸고 있는 함수의 스코프를 확인하고, 그래도 없으면 전역 스코프에서 찾으며, 그것도 없으면 내장 스코프에서 찾습니다.

스코프 결정은 파이썬에서 변수나 함수의 이름을 충돌 없이 구분하고 사용할 수 있도록 도와주는 중요한 메커니즘입니다. 이러한 스코프 규칙을 이해하고 올바르게 활용하는 것이 파이썬 코드를 작성하는 데 필수적입니다.

 

간단한 코드의 예로 알아보도록 합시다.

# 전역 스코프(Global Scope)
global_variable = 10

def example_function():
    # 지역 스코프(Local Scope)
    local_variable = 5
    print("Local variable inside the function:", local_variable)
    
    # 함수 내부에서 전역 변수에 접근 가능
    print("Global variable inside the function:", global_variable)

# 함수 호출
example_function()

# 함수 외부에서는 지역 변수에 접근할 수 없음
# print("Trying to access the local variable outside the function:", local_variable)

# 함수 외부에서 전역 변수에 접근 가능
print("Global variable outside the function:", global_variable)


이 코드는 전역 스코프와 지역 스코프를 보여주는 간단한 예제입니다. `global_variable`은 전역 스코프에서 정의되어 있으며, 함수 안에서도 해당 변수에 접근할 수 있습니다.

하지만 `local_variable`은 함수 `example_function()`의 지역 스코프에 정의되어 있습니다. 

따라서 함수 내에서는 `local_variable`을 사용할 수 있지만, 함수 외부에서는 접근할 수 없습니다. 만약 함수 외부에서 `local_variable`에 접근하려고 하면 NameError가 발생합니다.

출력 결과는 다음과 같을 것입니다

Local variable inside the function: 5
Global variable inside the function: 10
Global variable outside the function: 10


함수 내부에서 `local_variable`과 `global_variable`에 접근하여 값을 출력하고, 함수 외부에서는 `global_variable`에 접근하여 값을 출력할 수 있습니다. 하지만 함수 외부에서는 `local_variable`에 접근하려고 하면 오류가 발생합니다. 

이는 스코프 결정 규칙에 따라 변수들이 각각의 스코프에서 어떻게 동작하는지를 보여주는 예제입니다.

반응형