728x90
Test 코드 중
public function 주문_조회_실제()
{
$searcher = app(Searcher::class);
$result = $searcher->search(new SearchRequest());
$this->assertIsObject($result);
}
Base 코드 중
public function __construct(
protected Client $client,
protected JsonMapper $jsonMapper,
)
의문점
주문_조회_실제() 에서 Searcher 클래스를 호출하는데,
Searcher 클래스의 생성자에서는 Client 와 JsonMapper 를 받는다.
그런데 Mock Test 메서드들의 경우 둘의 인스턴스를 생성자에 전달하지만 주문_조회_실제() 메서드에서는 어디에도 넘겨주거나 인스턴스화하지 않는다.
그런데 어떻게 오류없이 실행되는 것일까?
답변
라라벨의 서비스 컨테이너는 자동 의존성 주입 기능을 제공합니다.
생성자에 타입 힌트를 사용하여 의존성을 선언하면 라라벨이 알아서 해당 의존성의 인스턴스를 생성하거나 이미 생성된 인스턴스를 주입해 줍니다.
예를 들어, 위에서 주어진 코드에서 `Client`와 `JsonMapper`는 라라벨의 서비스 컨테이너에 의해 자동으로 주입됩니다.
따라서 이 클래스를 사용할 때 `new` 키워드를 사용하여 직접적으로 해당 객체들을 생성할 필요가 없습니다.
이를 통해 코드의 결합도를 낮추고 유지보수성을 향상시킬 수 있습니다.
단, 이 기능을 원활하게 사용하기 위해서는 해당 클래스가 라라벨의 서비스 컨테이너를 통해 생성되어야 합니다.
직접 `new` 키워드로 인스턴스를 만들게 되면, 자동 의존성 주입 기능은 작동하지 않습니다.
'Project > Grip Api Package' 카테고리의 다른 글
Docker 컨테이너 DB 접근 / artisan 명령어 오류 / mysqli_sql_exception (0) | 2023.10.07 |
---|---|
*참고 패키지 정리 (0) | 2023.09.30 |
패키지 .env 와 config (0) | 2023.09.25 |
Java Date <-> Laravel Date (0) | 2023.09.25 |
Json encode, Json decode (0) | 2023.09.21 |