DI 는 Dependency Injection 의 약자로 우리말로는 '의존 주입'이라고 번역한다.
먼저 '의존(dependency)'이 뭔지 알아야한다.
여기서 말하는 의존은 객체 간의 의존을 의미한다.
한 클래스가 다른 클래스의 메서드를 실행할 때 이를 '의존'한다고 표현한다.
의존은 변경에 의해 영향을 받는 관계를 의미한다.
예를 들어 MemberDao 의 insert() 메서드의 이름을 inserMember() 로 변경하면 이 메서드를 사용하느 클래스의 소스 코드도 함께 변경된다.
이렇게 변경에 따른 영향이 전파되는 관계를 '의존'한다고 표현한다.
의존하는 대상이 있으면 그 대상을 구현하는 방법이 필요한데,
가장 쉬운 방법은 의존 대상 객체를 직접 생성하는 것이다.
위 방법은 클래스 내부에서 직접 의존 객체를 생성하는 것이 쉽긴 하지만
유지보수 관점에서 문제점을 유발할 수 있다.
이러한 문제점을 미연에 방지하기 위한 방법으로 DI와 서비스 로케이터가 있는데, 스프링과 관련된 것은 DI 이다.
DI (Dependency Injection)는 의존하는 객체를 직접 생성하는 대신 의존 객체를 전달받는 방식을 사용한다.
DI(의존 주입) 패턴 : 의존 객체를 직접 구하지 않고 생성자를 통해서 전달받는 것.
DI 를 사용하면 어떤 객체
를 사용하는 클래스가 여러 개여도 변경할 곳은 의존 주입 대상이 되는 객체를 생성하는 코드 한 곳뿐이다.
이렇게 되면 의존 객체를 직접 생성했던 방식에 비해 변경할 코드가 한 곳으로 집중되는 것을 알 수 있다.