Menu
Coddy logo textTech

Composer 오토로더

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

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

설정은 프로젝트 루트의 composer.json 파일에 위치합니다. 오토로딩(autoloading) 규칙을 정의하는 방법은 다음과 같습니다:

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

이것은 Composer에게 App\로 시작하는 모든 클래스가 src/ 디렉토리에서 로드되어야 함을 알려줍니다. 이 설정을 마친 후, Composer는 vendor/ 디렉토리에 오토로더 파일을 생성합니다.

Composer의 오토로더(autoloader)를 사용하려면, 엔트리 파일 상단에 단 한 줄만 추가하면 됩니다:

<?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의 오토로더는 수동 파일 포함(manual file includes)을 제거하고 프로젝트 전반에 걸쳐 일관된 클래스 로딩을 보장합니다. 이는 거의 모든 현대적인 PHP 애플리케이션과 프레임워크에서 사용되는 표준 방식입니다.

challenge icon

챌린지

쉬움

여러 파일에 걸쳐 클래스를 구성하기 위해 Composer의 오토로딩(autoloading) 방식을 사용하는 작은 애플리케이션을 만들어 보겠습니다. PSR-4 네임스페이스와 중앙 오토로더를 사용하여 실제 PHP 프로젝트가 코드를 구조화하는 방식을 시뮬레이션하게 됩니다.

함께 작동하는 네 개의 파일을 생성합니다:

  • src/Models/Product.phpApp\Models 네임스페이스 안에 Product 클래스를 정의합니다. 이 클래스는 public $namepublic $price 속성, 두 값을 모두 받아 설정하는 생성자, 그리고 "[name]: $[price]"를 반환하는 getInfo() 메서드를 가져야 합니다.
  • src/Models/Customer.phpApp\Models 네임스페이스 안에 Customer 클래스를 정의합니다. 이 클래스는 public $name 속성, 이름을 받아 설정하는 생성자, 그리고 "Welcome, [name]!"을 반환하는 greet() 메서드를 가져야 합니다.
  • vendor/autoload.php — Composer의 동작을 모방하는 spl_autoload_register를 사용하여 간단한 오토로더를 만듭니다. 이 오토로더는 App\ 네임스페이스 접두사를 src/ 디렉토리에 매핑하고, 네임스페이스 구분자를 디렉토리 구분자로 변환한 뒤 .php를 추가하여 올바른 파일을 로드해야 합니다.
  • index.php — 이 파일은 애플리케이션의 진입점입니다. vendor/autoload.php에서 오토로더를 한 줄의 코드로 require한 다음, use 키워드를 사용하여 App\Models\ProductApp\Models\Customer를 모두 가져옵니다. 이름이 "Laptop"이고 가격이 999Product와 이름이 "Alice"Customer를 생성합니다. 고객의 greet() 호출 결과와 제품의 getInfo() 호출 결과를 각각 별도의 줄에 출력합니다.

여기서 핵심 개념은 index.php가 오토로더를 로드하기 위해 단 하나의 require 문만 필요하다는 것입니다. 그 이후에는 클래스를 사용할 때 모든 클래스가 자동으로 로드됩니다. 이것이 바로 현대적인 PHP 프레임워크와 애플리케이션이 Composer와 함께 작동하는 방식입니다.

치트 시트

Composer는 composer.json 설정 파일을 읽고 PSR-4 표준을 따르는 최적화된 오토로더를 생성하여 클래스 로딩을 자동화합니다.

composer.json에 오토로딩 규칙을 정의합니다:

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

이것은 App\ 네임스페이스를 src/ 디렉토리에 매핑합니다. Composer는 vendor/ 디렉토리에 오토로더 파일을 생성합니다.

단일 require 문으로 Composer의 오토로더를 사용하세요:

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

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

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

필요한 경우 여러 네임스페이스 매핑을 정의할 수 있습니다:

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

Composer의 오토로더는 수동 파일 포함(include)을 제거하며 현대적인 PHP 애플리케이션의 표준 방식입니다.

직접 해보기

<?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실력 점검

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

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