Menu
Coddy logo textTech

Composer 오토로더

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 13번째.

직접 autoloader를 작성하는 것도 가능하지만, 실제 PHP 프로젝트에서는 Composer를 사용해 autoloading을 자동으로 처리합니다. Composer는 프로젝트의 구성을 읽고 PSR-4 표준을 따르는 최적화된 autoloader를 생성합니다.

구성은 프로젝트 루트의 composer.json 파일에 있습니다. autoloading 규칙은 다음과 같이 정의합니다:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

이는 App\으로 시작하는 모든 클래스가 src/ 디렉터리에서 로드되어야 한다는 것을 Composer에 알려줍니다. 이를 설정하면 Composer는 vendor/ 디렉터리에 오토로더 파일을 생성합니다.

Composer의 autoloader를 사용하려면 entry file 상단에 다음 한 줄만 있으면 됩니다:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

이 하나의 require 문이 전체 프로젝트의 모든 클래스 로딩을 처리합니다. 필요한 경우 여러 네임스페이스 매핑을 정의할 수 있습니다.

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

핵심 요점: Composer의 autoloader는 수동으로 파일을 포함할 필요를 없애고 프로젝트 전체에서 일관된 class 로딩을 보장합니다. 이는 사실상 모든 최신 PHP 애플리케이션과 프레임워크에서 사용하는 표준 방식입니다.

challenge icon

챌린지

쉬움

Composer의 autoloading 접근 방식을 사용하여 여러 파일에 걸쳐 class를 구성하는 작은 애플리케이션을 만들어 보겠습니다. PSR-4 namespace와 중앙 autoloader를 사용해 실제 PHP 프로젝트가 코드를 구성하는 방식을 시뮬레이션합니다.

함께 작동하는 네 개의 file을 만들겠습니다:

  • src/Models/Product.php: App\Models namespace에 Product class를 정의합니다. public $namepublic $price properties, 두 값을 accepts하고 설정하는 constructor, 그리고 "[name]: $[price]"를 returns하는 getInfo() method를 가져야 합니다.
  • src/Models/Customer.php: App\Models namespace에 Customer class를 정의합니다. public $name property, name을 accepts하고 설정하는 constructor, 그리고 "Welcome, [name]!"을 returns하는 greet() method를 가져야 합니다.
  • vendor/autoload.php: Composer의 동작을 모방하는 spl_autoload_register를 사용하여 간단한 autoloader를 만듭니다. App\ namespace prefix를 src/ directory에 매핑하고, namespace separators를 directory separators로 변환한 뒤 올바른 file을 불러오기 위해 .php를 덧붙여야 합니다.
  • index.php: 이것은 entry point file입니다. 한 줄로 vendor/autoload.php의 autoloader를 Require한 다음, use keyword를 사용하여 App\Models\ProductApp\Models\Customer를 모두 import합니다. name이 "Laptop"이고 price가 999Product와 name이 "Alice"Customer를 Create합니다. customer에서 greet()를 호출한 result와 product에서 getInfo()를 호출한 result를 Print합니다(각각 별도의 줄에 출력).

여기서 핵심 개념은 index.php가 autoloader를 불러오기 위해 하나의 require 문만 필요로 한다는 것입니다. 그 이후에는 사용하려는 모든 class가 자동으로 로드됩니다. 이것이 바로 최신 PHP framework와 애플리케이션이 Composer와 함께 작동하는 방식입니다.

직접 해보기

<?php
// TODO: vendor/autoload.php에서 오토로더를 require하세요

// TODO: 'use' 키워드를 사용하여 App\Models\Product를 임포트하세요

// TODO: 'use' 키워드를 사용하여 App\Models\Customer를 임포트하세요

// TODO: 이름이 "Laptop"이고 가격이 999인 Product를 생성하세요

// TODO: 이름이 "Alice"인 Customer를 생성하세요

// TODO: 고객의 greet() 결과를 출력하세요

// TODO: 제품의 getInfo() 결과를 출력하세요
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러