이 글에서는 PHP의 네임스페이스(Namespace)에 대해 자세히 알아보겠습니다. 대규모 애플리케이션을 개발하거나 서드파티 라이브러리를 프로젝트에 통합할 때, 클래스명이나 함수명이 서로 충돌하는 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 PHP는 관련된 클래스, 인터페이스, 함수, 상수를 하나의 그룹으로 묶어 관리할 수 있는 네임스페이스 기능을 제공합니다.
네임스페이스 선언 문법
네임스페이스는 namespace 키워드를 사용하여 선언합니다. 기본적인 선언 방법은 다음과 같습니다.
<?php
namespace MyFirstNamespace {
function welcome() {
echo 'Welcome To Namespace';
}
}
?>네임스페이스가 필요한 이유
PHP에서 네임스페이스는 재사용 가능한 코드 컴포넌트를 만드는 라이브러리 및 애플리케이션 개발자들이 겪는 두 가지 핵심 문제를 해결하기 위해 도입되었습니다.
- 이름 충돌 방지: 직접 작성한 코드와 PHP 내장 클래스·함수·상수 또는 서드파티 클래스·함수·상수 간의 이름 충돌을 예방합니다.
- 코드 가독성 향상: 지나치게 긴 이름(Extra_Long_Names 등)을 짧은 별칭으로 줄여 소스 코드의 가독성을 높일 수 있습니다.
use 키워드로 별칭(Alias) 사용하기
네임스페이스는 애플리케이션 내 파일의 주소(경로)를 나타내는 역할을 합니다. 그런데 경로가 길어질 경우 매번 전체 이름을 작성하는 것은 번거롭고 비효율적입니다. 이럴 때 use 키워드를 사용하면 해당 주소에 대한 별칭(alias)을 지정하여 간결하게 사용할 수 있습니다.
다음 예제를 통해 살펴보겠습니다.
<?php
namespace SMTP;
class Mail {}
namespace Mailgun;
class Mail {}
use SMTP\Mail as SMTPMail;
use Mailgun\Mail as MailgunMail;
$smtp_mailer = new SMTPMail();
$mailgun_mailer = new MailgunMail();
?>예제 설명
위 예제에는 두 개의 다른 네임스페이스(SMTP, Mailgun) 안에 동일한 이름의 Mail 클래스가 각각 정의되어 있습니다. 일반적으로 같은 이름의 클래스를 동시에 사용하면 충돌이 발생하지만, 네임스페이스가 다르기 때문에 문제 없이 공존할 수 있습니다.
그리고 use ... as ... 구문으로 별칭을 지정하면, 코드 내 어디서든 SMTPMail 또는 MailgunMail이라는 짧은 이름으로 해당 클래스 객체에 접근하고 인스턴스를 생성할 수 있습니다. 이처럼 네임스페이스와 use 키워드를 함께 활용하면 이름 충돌을 피하면서도 깔끔하고 읽기 쉬운 코드를 작성할 수 있습니다.