🔥 변수의 범위와 수명

391자
5분

변수의 범위(Scope)는 변수가 어디에서 접근 가능한지를 나타내며, 변수의 수명(Lifetime)은 변수가 얼마나 오랫동안 유지되는지를 나타냅니다. 이 두 가지 개념은 프로그램 내에서 변수를 효율적으로 사용하고 버그를 방지하는 데 중요합니다.

전역 범위 (Global Scope)

전역 범위에서 정의된 변수는 프로그램 어디에서나 접근할 수 있습니다. 이 변수들은 프로그램이 실행되는 동안 계속 유지되며, 함수 내부에서도 접근할 수 있습니다.

global_variable = 10  # 전역 변수
 
def my_function():
    print(global_variable)  # 전역 변수에 접근 가능
 
my_function()
print(global_variable)
 
python

지역 범위 (Local Scope)

지역 범위에서 정의된 변수는 특정 함수 내에서만 접근할 수 있습니다. 이 변수들은 해당 함수가 호출될 때 생성되고 함수가 종료될 때 파괴됩니다.

def my_function():
    local_variable = 5  # 지역 변수
    print(local_variable)
 
my_function()
print(local_variable)  # 오류 발생
 
python

함수 내에서 전역 변수 수정

함수 내에서 전역 변수를 수정하려면 global 키워드를 사용해야 합니다.

global_variable = 10
 
def modify_global_variable():
    global global_variable
    global_variable = 20
 
modify_global_variable()
print(global_variable)  # 20으로 변경됨
 
python

중첩 범위 (Nested Scope)

함수 내부에서 다른 함수를 정의할 경우, 내부 함수는 외부 함수의 범위에 접근할 수 있습니다.

def outer_function():
    outer_variable = 10
 
    def inner_function():
        print(outer_variable)  # 외부 함수의 변수에 접근 가능
 
    inner_function()
 
outer_function()
 
python

중첩 함수에서 외부 함수의 변수에 접근하려면 nonlocal 키워드를 사용해야 합니다. nonlocal 키워드를 사용하면 Python은 해당 변수가 가장 가까운 외부 함수의 범위에 있는 것으로 인식하고, 그 변수를 수정할 수 있도록 해줍니다.

예를 들어, 다음과 같이 중첩 함수에서 외부 함수의 변수를 수정하는 경우를 살펴보겠습니다:

def outer_function():
    outer_variable = 10
 
    def inner_function():
        nonlocal outer_variable
        outer_variable = 20  # 외부 함수의 변수 수정
 
    inner_function()
    print(outer_variable)  # 수정된 값을 출력
 
outer_function()
 
python

위의 예제에서 inner_function 내에서 nonlocal outer_variable을 사용하여 외부 함수인 outer_function의 범위에 있는 outer_variable에 접근하고 값을 수정할 수 있습니다. 이후 outer_function에서 outer_variable을 출력하면 수정된 값인 20이 출력됩니다. 이렇게 nonlocal 키워드를 사용하면 중첩 함수에서 외부 함수의 변수를 조작할 수 있습니다.

변수의 수명

변수의 수명은 변수가 생성되고 소멸되는 시점을 나타냅니다. 지역 변수의 수명은 함수가 호출될 때 시작되고 함수가 종료될 때 끝납니다.

연습문제

  1. 다음 코드에서 어떤 변수가 전역 범위에서 정의되었는지 확인하세요.
x = 10
 
def my_function():
    y = 5
    print(x)
 
my_function()
 
python
  1. 함수 내에서 전역 변수를 수정하는 방법에 대해 설명하세요.
  2. 중첩 함수에서 외부 함수의 변수에 접근할 때 어떤 키워드를 사용해야 하는지 설명하세요.
  3. 지역 범위와 전역 범위 변수의 이름이 같을 때 Python은 어떤 변수를 사용할까요?
  4. 변수의 수명이 어떻게 결정되는지 설명하세요.
  5. Python에서 변수의 범위와 수명을 관리하는 데 어떤 예외적인 상황이 있을 수 있는지 예시와 함께 설명하세요.