AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

의존성 주입과 PHP 8의 간결성: Laravel 12 활용법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Laravel 프레임워크를 사용하는 PHP 개발자, 특히 Laravel 11에서 12로 업그레이드를 계획 중인 개발자

핵심 요약

  • 생성자 속성 프로모션(Constructor Property Promotion)은 PHP 8에서 도입된 기능으로, 의존성 주입(DI) 코드의 중복을 제거하고 가독성을 향상시킴
  • Laravel 12의 서비스 컨테이너는 타입 힌트 기반 자동 해상(Type Hint-based Resolution)을 통해 프로모티드 속성을 자동으로 주입함
  • 코드 줄 수 감소일관된 의존성 정의가 주요 이점으로, protected UserService $service처럼 단일 라인으로 속성 선언, 매개변수 정의, 할당을 처리 가능
  • public readonly 속성 사용으로 불변성 강화 가능(PHP 8.1+)

섹션별 세부 요약

1. 생성자 속성 프로모션의 정의

  • PHP 8에서 클래스 속성을 생성자 시그니처 내부에서 선언·초기화 가능
  • 기존 방식:

```php

protected UserService $service;

public function __construct(UserService $service) { $this->service = $service; }

```

  • 프로모션 방식:

```php

public function __construct(protected UserService $service) {}

```

  • 중복 줄 수 감소: 속성 선언, 매개변수 정의, 할당을 하나의 라인으로 통합

2. Laravel 12의 서비스 컨테이너 동작 방식

  • Laravel 12는 기존 서비스 컨테이너 동작 방식을 유지하며, 타입 힌트 기반 자동 해상을 지원
  • 예시:

```php

$this->app->bind(UserService::class, fn($app) => new UserService());

```

  • 컨테이너는 UserController 생성 시 UserService $serviceLoggerInterface $logger를 자동으로 주입

3. Laravel 11 vs Laravel 12 비교

  • Laravel 11:

- 속성 선언(3줄) + 생성자 매개변수(3줄) + 할당(3줄) → 총 7줄

- $this->service = $service;와 같은 중복 코드 존재

  • Laravel 12:

- 속성 프로모션으로 3줄만 사용 가능

- protected ProductService $service처럼 단일 라인으로 처리

4. 커스텀 서비스 및 명령어 예시

  • 커스텀 서비스:

```php

public function __construct(protected OrderRepository $orderRepo) {}

```

- 기존 방식($this->orderRepo = $orderRepo;) 대체 가능

  • 명령어:

```php

public function __construct(protected OrderReportService $reportService) {}

```

- php artisan make:policy와 같은 내장 생성기에서도 지원

5. 베스트 프랙티스 및 주의사항

  • 타입 힌트 필수: protected $service처럼 타입 미지정 시 mixed 타입 발생 → 정적 분석 약화
  • 단일 책임 원칙(SRP) 준수:

- 생성자에 5개 이상의 의존성 주입 시 리팩토링 권장

- 관련 로직을 작은 클래스로 그룹화하거나 Facade/Manager 서비스 도입

  • 불변성 강화:

- public readonly Mailer $mailer로 생성 후 재할당 시 예외 발생

결론

  • Laravel 12에서 생성자 속성 프로모션을 활용해 의존성 주입 코드를 70% 이상 간결화 가능
  • PHP 8.1 이상에서 public readonly 속성 사용으로 불변성 강화를 추천
  • 타입 힌트 생략 시 정적 분석 약화 → 반드시 타입 명시하고, SRP 위반 시 리팩토링 수행해야 함