Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 네임스페이스란? 초보자도 이해하는 쉬운 개념 정리

네임스페이스(namespace)는 스코프(scope)를 구현하는 방식입니다. 파이썬에서는 패키지, 모듈, 클래스, 함수, 메서드 각각이 고유한 "네임스페이스"를 가지며, 변수 이름은 바로 이 네임스페이스 안에서 해석(lookup)됩니다. 즉, 같은 이름이라도 어느 네임스페이스에 속해 있는지에 따라 전혀 다른 객체를 가리킬 수 있습니다.

네임스페이스는 언제 만들어지고 사라질까?

함수, 모듈 또는 패키지가 실행을 시작하면 그에 해당하는 네임스페이스가 새로 생성됩니다. 이를 일종의 "실행 컨텍스트(execution context)"라고 생각하면 이해하기 쉽습니다. 실행이 종료되면 해당 네임스페이스도 함께 제거되고, 그 안에 담겨 있던 변수들 역시 더 이상 접근할 수 없게 됩니다.

변수 이름 탐색 순서

파이썬은 변수 이름을 만나면 먼저 지역 네임스페이스(함수 본문, 모듈 내부 등 현재 실행 중인 범위)에서 해당 이름을 검색합니다. 여기서 찾지 못하면 이어서 전역 네임스페이스를 확인하고, 거기에도 없으면 오류가 발생합니다. 이러한 단계적 탐색 덕분에 함수 안의 변수 x와 전역의 변수 x가 서로 충돌하지 않고 공존할 수 있습니다.

변수는 어디에 생성되는가?

일반적으로 변수는 자신이 선언된 지역 네임스페이스에만 생성됩니다. 하지만 global 문과 nonlocal 문을 사용하면 지역 범위가 아닌 다른 네임스페이스에 변수를 생성하거나 기존 값을 수정할 수 있습니다.

  • global: 함수 안에서 전역 변수를 참조하거나 재할당할 때 사용합니다.
  • nonlocal: 중첩 함수에서 바깥쪽(외부 함수)의 지역 변수를 참조하거나 수정할 때 사용합니다.

간단한 예제

x = 10  # 전역 네임스페이스

def my_func():
    y = 20  # 지역 네임스페이스
    print(x + y)  # 지역에서 y를 찾고, 전역에서 x를 찾음

my_func()  # 30 출력

정리하면, 네임스페이스는 "이름과 객체를 연결해 주는 사전"과 같으며, 코드가 어느 범위에서 어떤 변수를 참조하는지 결정하는 핵심 원리입니다. 이 개념을 이해하면 변수 충돌, 스코프 관련 버그를 훨씬 쉽게 해결할 수 있습니다.