메인 콘텐츠로 건너뛰기

Dumpable 트레이트란

Illuminate\Support\Traits\Dumpable은 임의의 클래스에 dump()dd()를 추가하기 위한 작은 트레이트입니다. Laravel 10에서 도입되었고, Collection·Eloquent Builder·Request 등 Laravel 코어의 디버깅 경험을 통일하기 위해 널리 사용되고 있습니다. 목적은 단순합니다. 오브젝트를 var_dump 상당으로 확인하면서, 필요하다면 그 자리에서 처리를 중단하는 것입니다.

구현 확인하기

구현은 매우 단순해서 dump($this, ...$args)dd($this, ...$args)를 호출할 뿐입니다.
trait Dumpable
{
    public function dump(...$args): static
    {
        dump($this, ...$args);
        return $this;
    }

    public function dd(...$args): never
    {
        dd($this, ...$args);
    }
}
Laravel 13의 구현은 src/Illuminate/Support/Traits/Dumpable.php에 있습니다. 실제 시그니처는 PHPDoc으로 @return $this@return never를 표현하고 있습니다.

자체 클래스에서 사용하기

use Dumpable;을 추가하는 것만으로, 인스턴스 메서드로서 dump() / dd()를 사용할 수 있습니다.
use Illuminate\Support\Traits\Dumpable;

class UserData
{
    use Dumpable;
    
    public function __construct(
        public readonly string $name,
        public readonly string $email,
    ) {}
}

$user = new UserData('Taro', '[email protected]');

$user->dump(); // dumpして続行
$user->dd();   // dumpして終了

체인 중간에 디버그 끼워 넣기

dump()static(구현상 $this)을 반환하므로, 메서드 체인 도중에 안전하게 사용할 수 있습니다.
$result = collect([1, 2, 3])
    ->map(fn ($n) => $n * 2)
    ->dump()  // ここで中身を確認
    ->filter(fn ($n) => $n > 2)
    ->values();
dd()로 바꾸면 그 지점에서 처리가 멈추므로, 무거운 후속 처리 이전에 상태를 확인하고 싶을 때 편리합니다.

패키지 개발에서의 활용

자체 Value Object·DTO·Builder에 Dumpable을 넣어 두면, 사용자가 추가 도구 없이도 상태를 확인할 수 있습니다.
1

Value Object / DTO에 추가하기

use Illuminate\Support\Traits\Dumpable;

final class InvoiceData
{
    use Dumpable;

    public function __construct(
        public readonly string $number,
        public readonly int $total,
    ) {}
}
2

Fluent Builder 도중에 확인하기

$payload = (new PackageRequestBuilder)
    ->forUser($userId)
    ->withLocale('ja')
    ->dump('before send')
    ->toArray();

추가 인수 전달하기

Dumpable은 내부에서 dump($this, ...$args) / dd($this, ...$args)를 호출하므로, 문맥 정보를 함께 출력할 수 있습니다.
$user->dump('デバッグポイントA');
// $this と 'デバッグポイントA' が同時に出力される
이는 여러 곳에서 dump()를 사용할 때 유용합니다. 어느 지점에서 출력되었는지 즉시 판별할 수 있습니다.

관련 트레이트

tap() 헬퍼 / Tappable

부수 효과를 끼워 넣으면서 값을 반환하는 패턴을 배웁니다.

Conditionable 트레이트

조건부로 체인 처리를 분기하는 설계를 배웁니다.

Macroable 트레이트

기존 클래스를 확장하여 고유 메서드를 추가하는 방법을 배웁니다.
마지막 수정일 2026년 7월 13일