DI(Dependency Injection)

https://www.slideshare.net/baejjae93/dependency-injection-36867592

OOP는 원래 객체간 메시지 전달을 하는 방식으로 진행되는 프로그래밍 방식아므로, 클래스간 의존은 어쩌피 존재한다.
우리의 목적은 의존을 없애야하는게 아니라 결합을 약하게 해야하는 것이다.

클래스에서 특정 클래스에 직접 의존하는 것이 아니라, 행위(인터페이스)에 의존해야 한다
(클래스에 직접 의존하면 클래스에 대해 더 많이 가정해야 하므로 강한 결합이 형성된다)

행위를 구현한 클래스들은 외부에서 생성해서 주입하도록 한다

근데 매번 이렇게 외부에서 구현체를 생성해서 넣어주는게 귀찮고 불편하므로, 이런걸 제공해주는 프레임워크를 사용하는 것이 좋다 == 스프링
스프링의 최대 장점은 DI이다