Service 가 생성될 때마다 Repository를 함께 생성한다. 한 개일 때는 괜찮지만 기능이 늘어나면서 Service의 개수가 늘어나면 그만큼 Repository의 개수도 증가한다.
소프트웨어 세계에서는 가위 객체 1개를 만들어두면, 여러 명이 한 개의 가위를 닳지 않고 사용할 수 있다.
ctRepository 클래스 생성 과정에서 DB의 id, password 정보를 받아야 하는 조건이 생겼다고 가정해보자.
Repository 클래스 생성자가 변경되면, 그 Repository를 생성하는 Service 클래스 코드도 변경되어야 한다. 만약, Service에서도 DB의 id, password를 받아서 처리해야 한다면 Controller클래스 코드도 변경되어야 한다.
이렇게 하나의 클래스 생성자 변화가 다른 클래스에 영향을 주는 이유는 강한 결합 때문이다.
모든 Controller는 Repository를 생성하려면 id, pw를 알아야 한다.
위에서 든 예시에 비유하면, 가위를 사용하려면 그 가위의 원산지와 재질을알아야 한다는 것이다.
위의 두 가지 문제점을 해결할 방법이
의존성 주입(DI)이다.
하나의 객체에서 다른 객체가 필요할 때 객체를 직접 생성하지 않고 이미 생성된 객체를 가져오는 작업이다.