파이썬에서 네임스페이스(namespace)는 변수 이름이 어디에 속하고 어떻게 해석되는지를 결정하는 '이름 공간'입니다. 쉽게 말해 스코프(scope)를 구현하는 핵심 메커니즘이라고 할 수 있습니다.
네임스페이스의 기본 개념
파이썬에서는 패키지(package), 모듈(module), 클래스(class), 함수(function), 메서드(method) 각각이 자신만의 네임스페이스를 가집니다. 이 네임스페이스 안에서 변수 이름들이 해석(resolve)됩니다.
함수, 모듈, 패키지가 평가(evaluation)되어 실행을 시작하는 순간 네임스페이스가 생성됩니다. 이를 일종의 '실행 컨텍스트(execution context)'라고 생각하면 이해하기 쉽습니다. 그리고 실행이 끝나면 해당 네임스페이스와 그 안에 있던 변수들도 함께 사라집니다.
이름은 어떤 순서로 찾아질까?
변수 이름에 접근할 때 파이썬은 다음 순서대로 네임스페이스를 확인합니다.
1. 지역(local) 네임스페이스: 현재 실행 중인 함수 본문, 모듈 내부 등
2. 전역(global) 네임스페이스: 지역 네임스페이스에 이름이 없을 경우 확인
즉, 함수 내부에서 변수를 참조하면 먼저 지역 네임스페이스를 살펴보고, 거기에 없으면 전역 네임스페이스에서 해당 이름을 찾습니다.
변수는 어디에 생성되는가?
일반적으로 변수는 지역 네임스페이스에만 생성됩니다. 하지만 예외적으로 다른 네임스페이스에 변수를 만들어야 할 때 사용하는 키워드가 바로 global과 nonlocal입니다.
global: 함수 내부에서 전역 네임스페이스의 변수를 생성하거나 수정할 때 사용합니다.nonlocal: 중첩 함수(nested function)에서 바깥쪽 함수의 지역 변수를 참조하고 수정할 때 사용합니다.
예제 코드
x = 10 # 전역 네임스페이스
def outer():
y = 20 # outer의 지역 네임스페이스
def inner():
nonlocal y # 바깥 함수(outer)의 y를 수정
global x # 전역 변수 x를 수정
y = 30
x = 99
inner()
print(y) # 30 출력
outer()
print(x) # 99 출력정리
네임스페이스는 파이썬이 변수 이름을 관리하고 충돌 없이 해석할 수 있도록 돕는 핵심 구조입니다. 실행이 시작되면 생성되고, 실행이 끝나면 소멸된다는 점, 그리고 이름 탐색은 지역 → 전역 순서로 이루어진다는 점만 기억하면 파이썬의 스코프 동작을 명확하게 이해할 수 있습니다.