네임스페이스 개요

네임스페이스 개요 (Namespaces overview)

네임스페이스(namespace)가 무엇이고, 라이브러리·애플리케이션 작성자들이 겪는 이름 충돌 문제를 어떻게 해결해 주는지 설명한다. PHP 5.3부터 도입된 이 기능의 개념과 기본 사용법을 예제와 함께 살펴본다.

출처: Namespaces overview

본문

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

네임스페이스(namespaces)란 무엇일까요? 가장 넓은 정의에서 네임스페이스는 항목(item)을 캡슐화하는 한 방법입니다. 이것은 여러 곳에서 추상적인 개념으로 볼 수 있습니다. 예를 들어 어떤 운영 체제에서든 디렉터리는 관련 파일을 그룹화하는 역할을 하며, 그 안의 파일들에 대한 네임스페이스 역할을 합니다. 구체적인 예로, foo.txt 파일은 /home/greg 디렉터리와 /home/other 디렉터리 양쪽에 모두 존재할 수 있지만, foo.txt 의 두 복사본이 같은 디렉터리 안에 공존할 수는 없습니다. 또한 /home/greg 디렉터리 밖에서 foo.txt 파일에 접근하려면, 디렉터리 구분자를 사용해 파일 이름 앞에 디렉터리 이름을 붙여 /home/greg/foo.txt 를 만들어야 합니다. 이와 같은 원리가 프로그래밍 세계의 네임스페이스에도 그대로 적용됩니다.

PHP 세계에서 네임스페이스는 라이브러리와 애플리케이션 작성자들이 클래스나 함수 같은 재사용 가능한 코드 요소를 만들 때 마주치는 두 가지 문제를 해결하도록 설계되었습니다.

  1. 작성자가 만든 코드와 PHP 내장 클래스·함수·상수 또는 타사 클래스·함수·상수 사이의 이름 충돌(name collisions).
  2. 첫 번째 문제를 완화하기 위해 만들어진 Extra_Long_Names 같은 긴 이름을 별칭(alias)으로 줄여, 소스 코드의 가독성을 높이는 능력.

PHP 네임스페이스는 관련된 클래스, 인터페이스, 함수, 상수를 그룹화하는 방법을 제공합니다. 다음은 PHP에서의 네임스페이스 문법 예시입니다.

예제 #1 네임스페이스 문법 예시

<?php
namespace my\name; // see "Defining Namespaces" section

class MyClass {}
function myfunction() {}
const MYCONST = 1;

$a = new MyClass;
print $a::class . "\n";
$c = new \my\name\MyClass; // see "Global Space" section
print $c::class . "\n";

$a = strlen('hi'); // see "Using namespaces: fallback to global
                   // function/constant" section
print $a . "\n";

$d = namespace\MYCONST; // see "namespace operator and __NAMESPACE__
                        // constant" section
print $d . "\n";
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // see "Namespaces and dynamic language features" section

Note: 네임스페이스 이름은 대소문자를 구분하지 않습니다(case-insensitive).

Note: PHP 라는 네임스페이스 이름과, 이 이름으로 시작하는 복합 이름(예: PHP\Classes)은 내부 언어 사용을 위해 예약되어 있으므로 사용자 공간(userspace) 코드에서 사용해서는 안 됩니다.

더 알아보기

  • 네임스페이스 정의하기 (Defining Namespaces)
  • 네임스페이스와 동적 언어 기능 (Namespaces and dynamic language features)
  • 전역 공간 (Global Space) 와 전역 함수·상수로의 폴백