내장 네임스페이스와 전역 네임스페이스의 핵심 차이
파이썬에서 내장(built-in) 네임스페이스와 전역(global) 네임스페이스의 가장 큰 차이는 적용 범위(scope)입니다.
내장 네임스페이스는 인터프리터 인스턴스 전체, 즉 해당 인터프리터에서 실행되는 모든 스크립트와 모듈이 공유하는 범위입니다. 반면 전역 네임스페이스는 모듈 단위, 다시 말해 하나의 파일(.py) 안에서만 유효한 범위를 가집니다.
내장 네임스페이스란?
내장 네임스페이스에는 print(), len(), range(), int() 같은 파이썬 기본 제공 함수와 예외 클래스들이 포함되어 있습니다. 이 이름들은 별도의 import 없이 어느 파일에서든 호출할 수 있으며, 인터프리터가 시작될 때 자동으로 생성되어 프로그램 종료 시까지 유지됩니다.
전역 네임스페이스란?
전역 네임스페이스는 각 모듈(파일)마다 독립적으로 생성됩니다. 모듈 최상위 레벨에서 정의된 변수, 함수, 클래스가 여기에 저장되며, 해당 모듈이 메모리에 로드되어 있는 동안 유지됩니다.
# module_a.py
x = 10 # module_a의 전역 네임스페이스에 저장
def greet(): # 역시 module_a의 전역 네임스페이스에 저장
print("hello")위 코드의 x와 greet은 module_a라는 하나의 전역 네임스페이스에 속하며, 다른 모듈에서 사용하려면 import를 통해 접근해야 합니다.
이름 탐색 순서(LEGB 규칙)
파이썬은 변수나 함수 이름을 참조할 때 다음 순서로 네임스페이스를 탐색합니다.
- L(Local): 현재 함수 내부
- E(Enclosing): 바깥쪽 감싸는 함수
- G(Global): 현재 모듈의 전역 네임스페이스
- B(Built-in): 내장 네임스페이스
즉, 전역 네임스페이스에서 이름을 찾지 못하면 마지막으로 내장 네임스페이스를 확인합니다. 만약 전역 변수가 내장 함수와 같은 이름(예: print = 5)을 가지면, 전역 네임스페이스의 이름이 우선적으로 사용되어 내장 함수를 가릴 수 있으므로 주의해야 합니다.
정리
- 내장 네임스페이스: 인터프리터 전체에서 공유, 기본 제공 함수·예외 포함
- 전역 네임스페이스: 모듈(파일)별로 독립적으로 존재, 모듈 최상위 정의가 저장됨
두 네임스페이스의 범위 차이를 이해하면 변수 충돌과 이름 가림(shadowing) 문제를 예방하고, 더 예측 가능한 파이썬 코드를 작성할 수 있습니다.