IoC(제어의 역전)는 서버 컨테이너 기술, 디자인 패턴, 객체 지향 설계 등에 적용하게 되는 일반적인 개념인데 반해 DI(Dependency Injection)는 IoC 개념을 조금 구체화시킨 것이라고 볼 수 있습니다.
클래스끼리는 사용하고자 하는 클래스의 객체를 생성해서 참조하게 되면 의존 관계가 성립하게 됩니다.
두 클래스 간에 의존 관계는 성립되었지만 아직까지 의존성 주입은 이루어지지 않았습니다.
그럼 이제 의존성 주입을 해보도록 하겠습니다.

MenuService의 기능을 사용하기 위해 MenuController에서 MenuService의 객체를 new 키워드로 직접 생성한 반면에 [그림 2-6]에서는 MenuController 생성자로 MenuService의 객체를 전달 받고 있습니다.
이처럼 생성자를 통해서 어떤 클래스의 객체를 전달받는 것을 ‘의존성 주입’이라고 합니다.
생성자의 파라미터로 객체를 전달하는 것을 외부에서 객체를 주입한다라고 표현을 하는 것입니다.
그렇다면 여기서 의미하는 객체를 주입해 주는 ‘외부’는 무엇일까요?
바로 CafeClient 클래스가 MenuController의 생성자 파라미터로 menuService를 전달하고 있기 때문에 객체를 주입해 주는 외부가 됩니다.
우리가 의존성 주입을 사용할 때, 항상 염두에 두어야 하는 부분이 한 가지 있습니다.
그것은 바로 현재의 클래스 내부에서 외부 클래스의 객체를 생성하기 위한 new 키워드를 쓸지 말지 여부를 결정하는 것입니다.