네임스페이스 – 01.네임스페이스란?

문서 출처

많은 사람들이 네임스페이스namespace(이름공간) 개념을 이해하는데 어려움을 겪는 것 같습니다. 2008년 8월 1일 php.net에 정식 릴리즈된 5.3.0 알파1 버전부터 네임스페이스를 지원한다기에 네임스페이스를 이곳에서 다시 한 번 정리하게 되었습니다. – 2008.8.9

프로그램 소스의 여러 가지 구성 요소 중에는 클래스/함수/상수 이름과 같은 식별자identifier들이 포함되어 있는데 이러한 이름들이 동일한 이름으로 중복되어 사용되더라도 서로 충돌되지 않도록 해주는 기능이 네임스페이스입니다.

초등학교 교실

예를 들어, 어떤 초등학교 6학년 1반에 홍길동이란 이름을 가진 어린이가 3명 있다고 하면 이 반 담임선생님은 출석을 부를 때마다 곤혹을 치를 것입니다.

  • 키 큰 홍길동~
  • 키 작은 홍길동~
  • 뚱뚱한 홍길동~

그렇다고 아이들보고 이름 바꾸라고 할 수 있습니까? 불편하지만 홍길동 앞에 “키 큰”, “키 작은”, “뚱뚱한”과 같은 접두어를 붙일 수 밖에 없겠지요.

사실 이 문제를 근본적으로 해결하려고 했다면 학년초 반편성할 때 3명의 홍길동 어린이를 서로 다른 반으로 편성했을 것입니다.

< 각 반으로 편성되어 관리되고 있는 3명의 홍길동 >

이제는 “키 큰”, “키 작은”, “뚱뚱한”이라는 괴상망칙한 수식어를 붙이지 않아도 됩니다. 각 반에서는 모두 수식어 없이 그냥 홍길동이라고 부르면 되고, 같이 있을 때는 1반 홍길동, 2반 홍길동, 3반 홍길동 라고 부르면 되지요.

파일 네임스페이스

모든 운영 체제에서 디렉터리는 관련 파일을 그룹화하고 그 안의 파일에 대한 네임스페이스 역할을 합니다. 구체적인 예로, foo.txt 파일은 /home/greg 디렉토리와 /home/other에 모두 존재할 수 있지만 foo.txt의 두 사본은 동일한 디렉토리에 공존할 수 없습니다.

또한 /home/greg 디렉토리 외부에 있는 foo.txt 파일에 접근하려면 디렉토리 구분자를 사용하여 파일 이름 앞에 디렉토리 이름을 추가하여 /home/greg/foo.txt 처럼 접근해야 합니다. 이와 동일한 원리가 프로그래밍 세계의 네임스페이스로 확장됩니다.

윈도우 시스템에서는 백슬래시backslash를 사용하여 경로의 디렉토리를 구분합니다.

  • c:\Windows\Fonts\arial.ttf

PHP에서의 네임스페이스 구분자namespace separator도 윈도우 시스템과 동일한  백슬래시backslash를 사용합니다.

  • \currentnamespace\foo::staticmethod();

네임스페이스란

네임스페이스란 그 이름이 뜻하는 바와 같이 서로 관련된 클래스/함수/상수의 이름을 통합관리하기 위하여 지정하는 공간을 의미합니다. 초등학교 각 반 교실 또는 파일이 저장된 디렉토리에 해당합니다. 키 큰 홍길동은 1반에, 키 작은 홍길동은 2반에, 뚱뚱한 홍길동은 3반에 소속시키는 것입니다. 이를 개념적으로 프로그래밍해보면 아래와 같습니다.

홍길동을 부를 때 1반 홍길동, 2반 홍길동, 3반 홍길동 라고 부르듯이 프로그램 소스에서는 아래와 같이 1반::홍길동(), 2반::홍길동(), 3반::홍길동() 라는 식으로 호출하면 됩니다.

각 반에서 반에 소속된 어린이의 이름을 출석부에 기록하여 관리하는 것처럼 각 네임스페이스에 소속된 이름을 심볼 테이블symbol table에 기록하여 관리합니다.

답글 남기기