NameSpace란?

wikipedia[1]

이름공간 또는 네임스페이스(영어: namespace)는 개체를 구분할 수 있는 범위를 나타내는 말로 일반적으로 하나의 이름 공간에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.

  • 파일 시스템은 파일에 이름을 할당하는 이름공간이다.
  • 일부 프로그래밍 언어들은 이름공간 안에 변수와 함수를 조직한다. 컴퓨터 프로그래밍 언어인 C에서는 전역 지역 공간과 지역 이름 공간라는 이름 공간에 대한 개념이 있는데, 각각의 이름 공간에서는 같은 변수나 함수 이름을 사용할 수 없지만, 영역이 다르면 변수나 함수명이 같을 수도 있다. C++와 Java 프로그래밍 언어에서는 이름 공간을 명시적으로 지정하여 사용할 수 있다.
  • 컴퓨터 네트워크와 분산 시스템은 이름을 컴퓨터, 프린터, 웹사이트, (원격) 파일 등의 자원에 할당한다.
#include <iostream>
using std::cout;
using std::endl;

namespace Box1{
   int boxSide = 4;
}

namespace Box2{
   int boxSide = 12;
}

int main () {
  cout << Box1::boxSide << endl;  //output 4
  cout << Box2::boxSide << endl;  //output 12
  return 0;
}

Python 에서 네임스페이스[2]

네임스페이스는 전역, 지역, 빌트-인 3가지로 분류된다.

namespace by python

출처 : A diagram of different namespaces in Python[3]


  • 빌트-인 네임스페이스: 기본 내장 함수 및 기본 예외들의 이름들이 소속된다. 파이썬으로 작성된 모든 코드 범위가 포함된다.
  • 전역 네임스페이스: 모듈별로 존재하며, 모듈 전체에서 통용될 수 있는 이름들이 소속된다.
  • 지역 네임스페이스: 함수 및 메서드 별로 존재하며, 함수 내의 지역 변수들의 이름들이 소속된다.

Python namespace의 특징

  • 네임스페이스는 딕셔너리 형태로 구현된다.
  • 모든 이름 자체는 문자열로 되어있고 각각은 해당 네임스페이스의 범위에서 실제 객체를 가리킨다.
  • 이름과 실제 객체 사이의 매핑은 가변적(Mutable)이므로 런타임동안 새로운 이름이 추가될 수 있다.
  • 다만, 빌트인 네임스페이스는 함부로 추가하거나 삭제할 수 없다.

참고 문헌

1. 이름공간, wikipedia, https://ko.wikipedia.org/wiki/이름공간

2. [Python] 네임스페이스 개념 정리, Hyungcheol Noh, https://hcnoh.github.io/2019-01-30-python-namespace

3. Python Namespace and Scope, Programiz, https://www.programiz.com/python-programming/namespace