로그인 회원가입
모두인포
전체IT경제사회생활스포츠시사여행연애

PHP 클래스 로딩과 네임스페이스(namespace)

lmkfox · 2025-09-02 · 조회 0
PHP 클래스 로딩과 네임스페이스(namespace)
1. 클래스 로딩 (Class Loading) PHP에서 클래스를 사용할 때 가장 기본은 include나 require로 직접 파일을 불러오는 방법입니다. 하지만 프로젝트가 커지면 클래스 파일이 많아지고, 매번 일일이 include/require 하기 번거로워집니다. 이 문제를 해결하기 위해 자동 로딩(autoloading) 기능이 제공됩니다. (1)  spl_autoload_register() spl_autoload_register()는 클래스를 호출했을 때 자동으로 해당 클래스를 불러올 수 있는 함수를 등록하는 기능입니다. <?php spl_autoload_register(function ($className) { require_once $className . ".php"; }); $car = new Car(); // Car.php 파일 자동 로딩 위 예시는 Car라는 클래스를 호출하면, PHP가 자동으로 Car.php 파일을 불러오도록 설정한 것입니다. (2) PSR-4 표준 (Composer Autoload) 실제 프로젝트에서는 Composer의 PSR-4 Autoloading 규칙을 사용하는 것이 일반적입니다. 예: composer.json { "autoload": { "psr-4": { "App\\": "src/" } } } 구조: src/ Car.php → namespace App; <?php require 'vendor/autoload.php'; use App\Car; $car = new Car(); 이제 클래스 파일을 일일이 include할 필요 없이, Composer autoload가 알아서 관리해 줍니다. 2. 네임스페이스 (Namespace) 네임스페이스는 클래스 이름 충돌을 방지하고 코드를 논리적으로 구분하는 방법입니다. (1) 기본 문법 <?php namespace MyApp\Models; class User { public function __construct() { echo "User 모델 생성됨"; } } 다른 파일에서 사용: <?php require "User.php"; // 방법 1: 풀 네임스페이스 사용 $user = new \MyApp\Models\User(); // 방법 2: use 키워드 사용 use MyApp\Models\User; $user = new User(); (2) 네임스페이스 충돌 방지 만약 Library\User 과 MyApp\Models\User 클래스가 둘 다 있다면? use Library\User as LibUser; use MyApp\Models\User as AppUser; $u1 = new LibUser(); $u2 = new AppUser(); as 키워드로 별칭(Alias)을 지정해서 충돌을 피할 수 있습니다. 3. 클래스 로딩과 네임스페이스 함께 쓰기 실전에서는 네임스페이스와 자동 로딩을 함께 씁니다. 예: src/ Models/ User.php src/Models/User.php <?php namespace App\Models; class User { public function hello() { return "안녕하세요, User 클래스입니다."; } } 메인 코드: <?php require "vendor/autoload.php"; use App\Models\User; $user = new User(); echo $user->hello(); 정리 - 클래스 로딩 - 작은 프로젝트: include, require, spl_autoload_register() - 큰 프로젝트: Composer + PSR-4 Autoloading 사용 - 네임스페이스 - 클래스 이름 충돌 방지 - namespace, use, as 키워드 활용 - 계층 구조로 정리 가능 (예: App\Models\User)

댓글

아직 댓글이 없습니다.

로그인 후 댓글을 남길 수 있습니다.