[PHP] autoload

2019. 5. 10. 14:25·Language/PHP
반응형
t

php_logo

클래스를 사용하기 위해서는 객체를 생성하여 해당 메서드를 호출해 줘야한다. 다음과 같이 특정 작업을 수행하는 클래스가 있다고 가정하자.

// index.php
<?php
class Worker
{
	public function work()
    {
    	echo "Worker::work() Called\n";
        //do something...
    }
}

위의 코드는 Worker라는 클래스를 정의한 것이다. work() 함수를 실행하기 위해서는 Worker 클래스의 인스턴스를 생성하여 호출을 해줘야 한다. 아래는 index.php에서 Worker 클래스의 인스턴스 $w를 생성하여 work()를 호출하는 코드이다.

//index.php
<?php
require_once "Worker.php";

$w = new Worker();
$w->work();

require_once, require, include, include_once에 대한 내용은 여기에서 확인할 수 있다.

require_once를 통해 Worker.php 파일을 가져와 Worker 클래스 정의를 포함하게 된다. 만일 해당 파일을 포함시키지 않는다면 Worker 클래스를 이용할 수 없다. 그리고 $w라는 인스턴스를 생성하여 work() 함수를 호출했다. localhost/index.php에 접근하면 다음과 같이 출력한다.

index_worker_called

index.php에 접근하면 Worker의 인스턴스를 생성하고 메서드를 실행한다.
지금의 경우에는 하나의 클래스만 가져와서 처리했지만 만일 다수의 파일을 가져올 경우에는 require_once의 호출 빈도가 증가할 것이다.

//index.php
<?php
require_once "Worker.php";
require_once "Worker2.php";
require_once "Worker3.php";
require_once "Worker4.php";
require_once "Worker5.php";
require_once "Worker6.php";
require_once "Worker7.php";
...


$w = new Worker();
$w->work();

$w1 = new Worker2();
$w1->work();
...

이 처럼 다수의 클래스를 가져오는 것은 불편하고 파일을 빼먹거나 오타로 인한 실수를 유발할 위험이 있다.
Autoload는 이런 문제점을 해결하기 위해 사용된다. 포함해야할 파일을 일일히 작성할 필요 없이 필요한 클래스 파일들을 가져올 수 있다.

//autoloader.php
<?php
spl_autoload_register($class)
{
	include "./" . $class . ".php";
}

이를 통해 require_once를 한 줄만 써도 사용되는 클래스들을 포함시킬 수 있다.

//index.php
<?php
require_once "autoload.php";

$w = new Worker();
$w->work();

$w1 = new Worker2();
$w1->work();
...

유사한 기능을 제공하는 __autoload()가 존재하지만, PHP5에 추가된 spl_autoload_register() 사용을 권장한다. spl_autoload_register는 실행 중인 시점을 기준으로 클래스나 인터페이스가 정의되어 있지 않으면 자동으로 로드해 준다.

참고 포스팅

추가로 보면 좋은 링크
제타위키, 블로그 글

반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/PHP' 카테고리의 다른 글
  • [PHP] psr4
  • [PHP] composer 설치
  • [PHP] 웹 프로그래밍
  • [PHP] PDO
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    redis
    MySQL
    C
    언리얼엔진4
    Python
    memcached
    select
    파이썬
    FPS
    Unreal Engine
    Unreal
    웹
    php
    게임
    클래스
    게임 개발
    JavaScript
    알고리즘
    NUXT
    C++
    프로그래머스
    pytorch
    map
    블루프린트
    PS
    자바
    mscoco
    CPP
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[PHP] autoload
상단으로

티스토리툴바