phpclass/객체정보2008. 8. 9. 12:28
작성: 2008.08.09
네임스페이스란?
많은 사람들이 네임스페이스(namespace; 이름공간) 개념을 이해하는데 어려움을 겪는 것 같습니다. 2008년 8월 1일 php.net에 정식 릴리즈된 5.3.0 알파1 버전부터 네임스페이스를 지원한다기에 네임스페이스를 이곳에서 다시 한 번 정리하게 되었습니다.
프로그램 소스의 여러 가지 구성요소 중에는 클래스명, 함수명, 변수명, 상수명과 같이 이름(identifier)들이 포함되어 있는데 이러한 이름들이 동일한 이름으로 중복하여 사용하더라도 서로 충돌되지 않도록 해주는 기능이 네임스페이스입니다.
초등학교 교실
예를 들어, 어떤 초등학교 6학년 1반에 홍길동이란 이름을 가진 어린이가 3명 있다고 하면 이 반 담임선생님은 출석을 부를 때마다 곤혹을 치를 것입니다.
키큰 홍길동~
키작은 홍길동~
뚱뚱한 홍길동~
< 6학년 1반에 편성된 3명의 홍길동 어린이 >
그렇다고 아이들보고 이름 바꾸라고 할 수 있습니까? 불편하지만 홍길동 앞에 "키큰", "키작은", "뚱뚱한"과 같은 접두어를 붙일 수 밖에 없겠지요.
사실 이 문제를 근본적으로 해결하려고 했다면 학년초 반편성할 때 3명의 홍길동 어린이를 서로 다른 반으로 편성했을 것입니다.
< 각 반으로 편성되어 관리되고 있는 3명의 홍길동 >
이제는 "키큰", "키작은", "뚱뚱한"이라는 괴상망칙한 수식어를 붙이지 않아도 됩니다. 각 반에서는 모두 수식어 없이 그냥 홍길동이라고 부르면 되고, 같이 있을 때는 1반 홍길동, 2반 홍길동, 3반 홍길동 라고 부르면 되지요.
네임스페이스(namespace; 이름공간)
네임스페이스란 그 이름이 뜻하는 바와 같이 서로 관련된 이름(함수명, 클래스명 ...)을 통합관리하기 위하여 지정하는 공간을 의미합니다. 초등학교 각 반 교실에 해당합니다. 키큰 홍길동은 1반에, 키작은 홍길동은 2반에, 뚱뚱한 홍길동은 3반에 소속시키는 것입니다. 이를 개념적으로 프로그래밍해보면 아래와 같습니다.
[code php;gutter:false] <?php namespace 1반; function 홍길동() { print "나는 키큰 홍길동이다.\n"; } ?> [/code]
[code php;gutter:false] <?php namespace 2반; function 홍길동() { print "나는 키작은 홍길동이다.\n"; } ?> [/code]
[code php;gutter:false] <?php namespace 3반; function 홍길동() { print "나는 뚱뚱한 홍길동이다.\n"; } ?> [/code]
홍길동을 부를 때 1반 홍길동, 2반 홍길동, 3반 홍길동 라고 부르듯이 프로그램 소스에서는 아래와 같이 1반::홍길동(), 2반::홍길동(), 3반::홍길동() 라는 식으로 호출하면 됩니다.
[code php;gutter:false] <?php 1반::홍길동(); 2반::홍길동(); 3반::홍길동(); ?> [/code]
각 반에서 반에 소속된 어린이의 이름을 출석부에 기록하여 관리하는 것처럼 각 네임스페이스에 소속된 이름을 심볼 테이블(symbol table)에 기록하여 관리합니다.

'phpclass > 객체정보' 카테고리의 다른 글

{네임스페이스}3.네임스페이스의 정의  (0) 2008.08.09
{네임스페이스}2.네임스페이스의 필요성  (0) 2008.08.09
What Is an Interface?  (0) 2005.10.25
{참조}5.참조 삭제  (0) 2001.03.02
{참조}4.참조 반환  (0) 2001.03.02
Posted by 방글24