[파이썬] 파이썬 2와 파이썬 3의 네임스페이스 차이

파이썬은 높은 가독성과 쉬운 문법으로 인해 많은 개발자들에게 사랑받는 언어입니다. 하지만, 파이썬 2와 파이썬 3 사이에는 몇 가지 중요한 차이점이 존재합니다. 이 중에서 하나는 파이썬 2와 파이썬 3의 네임스페이스 차이입니다. 이번 포스트에서는 파이썬 2와 파이썬 3에서의 네임스페이스 동작 방식을 알아보겠습니다.

네임스페이스란?

네임스페이스는 변수와 객체가 유효한 범위를 가지는 영역을 의미합니다. 파이썬에서는 네임스페이스를 통해 변수와 객체가 서로 충돌하지 않고 동작할 수 있도록 관리됩니다. 간단히 말하면, 네임스페이스는 변수와 객체의 이름을 저장하고 관리하는 공간입니다.

파이썬 2의 네임스페이스

파이썬 2에서는 네임스페이스가 단순한 전역과 지역으로 구분됩니다. 전역 네임스페이스는 스크립트와 모듈 수준에서 정의된 변수와 함수를 저장하고 관리합니다. 지역 네임스페이스는 함수와 클래스의 내부에 정의된 변수와 함수를 저장하고 관리합니다.

하지만 파이썬 2에서는 함수 내부에서 전역 변수에 접근할 수 있습니다. 이는 네임스페이스의 동작 방식이 직관적이지 않을 수 있다는 의미입니다. 전역 변수의 값이 예상치 못한 방식으로 변경될 수 있으므로 주의가 필요합니다.

파이썬 3의 네임스페이스

파이썬 3에서는 네임스페이스가 좀 더 명확하게 구분됩니다. 전역과 지역 네임스페이스 외에도 nonlocal과 built-in 네임스페이스가 추가되었습니다.

nonlocal 네임스페이스는 중첩된 함수 사이에서 변수를 공유하기 위해 사용됩니다. nonlocal 키워드를 사용하여 외부 함수의 변수를 내부 함수에서 사용할 수 있습니다. 이렇게 함으로써 함수 사이에서 변수를 공유할 수 있으며, 전역 변수를 사용하는 것보다 코드의 가독성을 높일 수 있습니다.

built-in 네임스페이스는 파이썬 언어와 함께 제공되는 내장 함수와 객체를 저장하고 관리합니다. 예를 들어, print() 함수나 len() 함수는 built-in 네임스페이스에 저장되어 있으므로 어떠한 import 문 없이 사용할 수 있습니다.

예제 코드

파이썬 2에서의 네임스페이스 동작 방식을 보여주는 예제 코드는 다음과 같습니다:

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

def my_func():
    x = 10  # 지역 네임스페이스
    print("Local namespace:", locals())

my_func()
print("Global namespace:", globals())

파이썬 3에서의 네임스페이스 동작 방식을 보여주는 예제 코드는 다음과 같습니다:

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

def my_func():
    nonlocal x  # nonlocal 네임스페이스
    x = 10
    print("Nonlocal namespace:", locals())

my_func()
print("Global namespace:", globals())

결론

파이썬 2와 파이썬 3의 네임스페이스 차이는 네임스페이스 동작 방식의 변경으로 이어집니다. 파이썬 3에서는 전역, 지역, nonlocal, built-in 네임스페이스가 명확하게 구분되어 변수와 객체의 범위를 관리합니다. 이를 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. 따라서 파이썬 개발을 할 때는 해당 네임스페이스를 제대로 이해하고 사용하는 것이 중요합니다.