PHP 자동 로딩(Autoloading)이란?
다른 PHP 스크립트 파일에 정의된 클래스를 사용하려면 일반적으로 include 또는 require 문으로 해당 파일을 명시적으로 포함해야 합니다. 하지만 PHP의 자동 로딩(autoloading) 기능을 활용하면 이러한 번거로운 작업 없이도 클래스를 편리하게 사용할 수 있습니다.
클래스가 실제로 사용되는 시점(객체 생성 등)에 PHP 파서가 해당 클래스 파일을 자동으로 불러오는데, 이를 위해서는 spl_autoload_register() 함수로 오토로더를 등록해야 합니다. 여러 개의 클래스를 한 번에 등록할 수도 있으며, 덕분에 PHP 파서는 오류를 발생시키기 전에 클래스나 인터페이스를 로드할 마지막 기회를 얻게 됩니다.
기본 문법
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});위와 같이 등록하면, 클래스가 처음 사용되는 시점에 대응하는 .php 파일로부터 클래스가 자동으로 로드됩니다.
자동 로딩 예제
다음 예제는 클래스를 자동 로딩하도록 등록하는 기본적인 방법을 보여줍니다.
예제 코드
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new test1();
$obj2 = new test2();
echo "objects of test1 and test2 class created successfully";
?>실행 결과
objects of test1 and test2 class created successfully
반면, 클래스 정의가 담긴 .php 파일을 찾지 못하면 아래와 같은 경고 및 치명적 오류(fatal error)가 발생합니다.
Warning: include(): Failed opening 'test10.php' for inclusion (include_path='C:\xampp\php\PEAR') in line 4 PHP Fatal error: Uncaught Error: Class 'test10' not found
예외 처리를 활용한 자동 로딩
파일의 존재 여부를 먼저 확인하고, 존재하지 않을 경우 예외(Exception)를 발생시키면 오류를 더욱 안전하고 우아하게 처리할 수 있습니다.
예제 코드
<?php
spl_autoload_register(function($className) {
$file = $className . '.php';
if (file_exists($file)) {
echo "$file included\n";
include $file;
} else {
throw new Exception("Unable to load $className.");
}
});
try {
$obj1 = new test1();
$obj2 = new test10();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>실행 결과
Unable to load test10.
위 예제에서는 test1.php 파일은 정상적으로 로드되지만, 존재하지 않는 test10.php를 찾으려다 예외가 발생하고 catch 블록에서 예외 메시지가 출력됩니다.
마무리
자동 로딩은 매번 include/require를 작성하는 수고를 덜어주고, 실제로 필요한 시점에만 파일을 로드하므로 애플리케이션 성능과 유지보수성에도 긍정적인 영향을 줍니다. 규모가 큰 프로젝트에서는 PSR-4 표준을 따르는 Composer의 오토로더를 활용하는 것도 좋은 선택입니다.