테스트 사이트 - 개발 중인 베타 버전입니다

MVC구조의 PHP프레임워크들이 꼭 사용하는 spl_autoload_register()

· 2년 전 · 892 · 4

사실 이글의 내용이 그누보드의 팁자료실에 적절한지를 주춤하였다. 그러나 그누보드도 언제인가는 이 방향으로 꼭 이 문제에 당착하게 될것이라 생각하구 여기에 글을 게시하게 되었다.

MVC구조의 PHP프레임워크들이 어떤 요청을 받으면 어느 클래스의 어느 메소드가 그 요청을 처리하여 리턴하는가 하는것을 제나름대로의 라우팅규칙을 제안한다.

여기서 꼭 살펴볼 문제가 있다.

실지로 어느 클래스라고 할때에는 그 클래스가 정의되어 있는 파일을 불러들이는것을 전제로 한다.

가령 index.php 파일에서 클래스 A, B, C 들을 사용해야 한다면

require_once('A.php');

require_once('B.php');

require_once('C.php');

$a = new A();

$B = new B();

$C = new C();

....

이렇게 해야 한다.

그런데 요청을 받아 처리할때 몇개의 클래스가 참여할지를 항시 생각하여 위와 같이 필요한 파일들을 로딩하는것은 개발하면 할수록 번거로운 문제로 된다.

이런 문제는 MVC개발구조를 기반으로 하는 CI, Laravel 등 프레임워크들에서도 명확히 해결해야 할 문제로 나선다.

바로 이 문제, 동적으로 파일을 로딩하는 기능을 spl_autoload_register() 함수가 지원해준다.

다음의 코드실례를 보자.

[code]

class Evening
{   
    public static function autoload($class)
    {
        $path = '/root/'.$class.'.php'; // 여기서 해당 클래스가 정의된 파일들의 경로를 작성해준다.
        if (file_exists($path)) { 
             require_once $path; 
             return true; 
        }
        return false;
    }
}

spl_autoload_register(array('Evening','autoload'));

$a = new A(); // Evening::autoload('A') 로 자동 실행, /root/A.php 파일이 로드됨

$b = new B(); // Evening::autoload('B') 로 자동 실행, /root/B.php 파일이 로드됨

$c = new C(); // Evening::autoload('C') 로 자동 실행, /root/C.php 파일이 로드됨

[/code]

보는거처럼 require_once('/root/A.php') 와 같은 코드파일로딩부분이 없어도 spl_autoload_register()에 의하여 '/root/A.php' 파일을 불러들였다.

이와 같이 클래스실체를 창조하는 코드가 있을때 어느 파일을 불러들여야 하는가를 spl_autoload_register()에 의하여 규칙을 작성하여 지원가능해진다.

라라벨이든, CI든 MVC기반의 프레임워크들에는 spl_autoload_register()을 꼭 사용하여 자기고유의 파일로딩규칙을 작성해놓고 그를 기초로 모든 클래스파일들이 동적으로 로딩하고 있다.

결국 spl_autoload_register()에 의하여 매 프레임워크나 프로젝트가 자기의 고유한 특징을 발현하는것이다.

프레임워크야 어디에 무슨 파일을 어떻게 작성해놓는가만 알면 되지 구태야 이런것두 알아야 할까? 이 질문도 이해는 되지만 그래도 고수라면 spl_autoload_register()에 의해 규정되어있는 파일로딩특징을 잘 알아야 하는것이다.

전번에 게시한 나의 기사 [나만의 PHP프레임워크를 만들어 본다] 에 소개한 이브닝프레임워크도 spl_autoload_register()을 사용하여 제나름의 파일로딩규칙을 작성하였다.

프레임워크소스들에서 require, include 같은 코드구문은 몇개 안된다. 그것은 spl_autoload_register()를 이용하여 동적으로 파일을 불러들이는것을 규정하기만 하면 되기때문이다.

오늘의 이글을 보시는 분들이 프레임워크를 아득한 높이로만 여기는게 아니라 spl_autoload_register() 의  사용원리만 잘 아면 얼마든지 자기만의 고유한 개발구조를 창조할 수 있다는 자신감을 가지길 바란다.

그누보드도 MVC기반의 그누보드로 언제든 비약하는 모습을 그려보며 이글을 마친다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 4개

무언지는 아직 좀 더 배워야 하는거구,. 어째든 보아하니 수준이 높다는게 느껴집니다.
@박대풍 감사합니다. 저도 별루 수준이 그렇게 높진 않습니다만 아는껏 경험으로 글을 썻습니다.
namespace와 composer를 활용하면 자동으로 클래스맵을 만들어서 오토로드를 구성해주죠.
최신 컴포저도 PHP 5.6 이상이면 지원합니다.
한국어가 좀 이상하네요.
첫 단락에 말씀하신 것 처럼 그누팁이랑 관련이 있을까요?

게시글 목록

번호 제목
17523
17516
17515
17514
17498
17493
17490
17487
17485
17481
17478
17477
17474
17473
17472
17470
17469
17463
17462
17461
17460
17458
17457
17454
17453
17448
17447
17446
17445
17444