티스토리 뷰
네임스페이스
네임스페이스가 무엇인가를 정의하기에 앞서서 파일을 생각해보자. 파일은 데이터를 보관하고 있는 일종의 컨테이너다. 그리고 이 컨테이너는 파일명으로 식별이 된다. 파일의 수가 많아지면서 파일을 관리하는 것이 점점 어려워진다. 그래서 고안된 것이 바로 디렉토리다. 디렉토리를 이용하면 같은 이름의 파일이 하나의 컴퓨터에 존재할 수 있다. 파일명의 충돌을 회피 할 수 있게 된 것이다. 네임스페이스란 간단하게 디렉토리와 같은 것이라고 생각하자. 하나의 에플리케이션에는 다양한 모듈을 사용하게 된다. 그런데 모듈이 서로 다른 개발자에 의해서 만들어지기 때문에 같은 이름을 쓰는 경우가 생길 수 있다. 이런 경우 먼저 로드된 모듈은 나중에 로드된 모듈에 의해서 덮어쓰기 되기 때문에 이에 대한 대책이 필요하다. 네임스페이스가 필요해지게 되는 것이다.
만약 환영인사를 언어별로 다르게 하고 싶다면 어떻게 해야 할까? 3개의 파일을 만든다.
greeting_en.php
1
2
3
4
|
<?php
function welcome(){
return 'Hello world';
}
|
greeting_ko.php
1
2
3
4
|
<?php
function welcome(){
return '안녕세계';
}
|
5.php
1
2
3
4
5
6
|
<?php
require_once 'greeting_ko.php';
require_once 'greeting_en.php';
echo welcome();
echo welcome();
?>
|
위의 코드는 아래와 같은 에러를 발생시킨다.
1
|
Fatal error: Cannot redeclare welcome() (previously declared in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\include\greeting_ko.php:3) in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\include\greeting_en.php on line 4
|
로드한 두개의 파일 모두 welcome라는 함수를 선언했기 때문이다. PHP에서는 함수의 중복 선언을 허용하지 않는다. 이런 경우 네임스페이스를 사용할 수 있다. 아래와 같이 로드되는 파일의 내용을 수정해보자.
greeting_en_ns.php
1
2
3
4
5
|
<?php
namespace language\en;
function welcome(){
return 'Hello world';
}
|
greeting_ko_ns.php
1
2
3
4
5
|
<?php
namespace language\ko;
function welcome(){
return '안녕하세요';
}
|
6.php
1
2
3
4
5
6
|
<?php
require_once 'greeting_ko_ns.php';
require_once 'greeting_en_ns.php';
echo language\ko\welcome();
echo language\en\welcome();
?>
|
로드되는 파일의 초입에 키워드 namespace를 이용해서 네임스페이스를 만들었다. 그리고 네임스페이스를 사용할 때는 함수 앞에 네임스페이스의 이름을 붙여서 사용하면 된다. 이로서 동일한 이름의 함수를 하나의 php 에플리케이션 안에서 사용할 수 있게 되었다.
하나의 파일에는 복수의 네임스페이스가 존재 할 수도 있다.
greeting_lang.php
1
2
3
4
5
6
7
8
9
|
<?php
namespace language\en;
function welcome(){
return 'Hello world';
}
namespace language\ko;
function welcome(){
return '안녕세계';
}
|
1
2
3
4
5
|
<?php
require_once 'greeting_lang.php';
echo language\ko\welcome();
echo language\en\welcome();
?>
|
네임스페이스는 함수 뿐만 아니라 클래스와 상수에 대해서도 사용할 수 있다. 네임스페이스에 대한 자세한 내용은 아래의 자료들을 참고하자.