기존에 작업할 때 컨트롤러에서 코드를 이렇게 쓰곤 했다.
1번 코드
use App\Models\User;
class LoginController extends Controller
{
protected $memberModel;
public function __construct(Request $request,)
{
parent::__construct($request);
$this->memberModel = new MemberModel();
}
}
위의 코드는 의존성 주입을 사용하지 않는 코드다.
2번 코드
use App\Models\User;
class LoginController extends Controller
{
protected $memberModel;
public function __construct(User $memberModel)
{
$this->memberModel = $memberModel;
}
}
위의 코드는 의존성 주입을 사용한 코드다.
사실 1번과 2번 코드 모두 내부에서 쓸 때는 그다지 큰 문제가 되진 않는다,
그러나 외부에서 호출될 때 말이 달라진다.
1번 코드는 외부에서 LoginController의 인스턴스를 생성할 때 아래처럼 쓴다.
$LoginController = new LoginController();
2번 코드는 외부에서 LoginController의 인스턴스를 생성할 때 아래처럼 쓴다.
$LoginController = new LoginController(new User2());
1번코드는 LoginController와 User 모델이 강하게 결합되어 있어서,
User 모델이 변경되면 LoginController도 수정해야 한다.
하지만 2번코드는 필요한 모델을 넣어주면 문제 없이 된다.
LoginController는 외부에서 User 모델을 주입받아 사용한다.
따라서 User 모델이 변경되어도 LoginController를 수정할 필요가 없으며,
또한 User 모델 대신 다른 모델을 주입해도 LoginController는 해당 모델을 사용할 수 있다.
의존성 주입을 사용하는 이유:
의존성 주입은 클래스 간의 결합도를 낮추고, 객체들 간의 의존성을 외부에서 주입받도록 하는 방법이다.
이를 통해 클래스들이 서로 독립적으로 작동하고, 변경에 유연하게 대응할 수 있게 된다.
코드의 유연성:
의존성 주입을 사용하면 LoginController 클래스가 User 모델을 직접 생성하지 않는다.
대신에 외부에서 User 모델을 주입받아 사용한다.
이렇게 하면 LoginController 는 User 모델과 결합되지 않으며, User 모델이 변경되어도 LoginController 의 코드를 수정할 필요가 없다.
코드의 확장 가능성:
의존성 주입을 사용하면 LoginController 는 User 모델뿐만 아니라 다른 모델 객체들도 주입받을 수 있다. 예를 들어, LoginController의 다른 메서드에서도 Order 모델이나 Product 모델 등을 주입받아 사용할 수 있다.
이는 LoginController를 다양한 모델과 함께 확장하여 재사용성을 높이는데 도움이 된다.
'백엔드 > PHP' 카테고리의 다른 글
[PHP] CURLOPT_TIMEOUT 과 CURLOPT_CONNECTTIMEOUT 의 차이점 (0) | 2024.05.15 |
---|---|
[라라벨] cookie 메서드 (0) | 2024.02.14 |
php PSR이란? (0) | 2024.01.12 |
윈도우 laravel 로컬 개발환경 세팅하기 (2) (0) | 2023.08.14 |
윈도우 laravel 로컬 개발환경 세팅하기 (1) (0) | 2023.08.14 |