IoC(Inversion of Control)란 제어의 "역전"으로, 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것이다.
외부(스프링 빈 !)에서 주입된(DI !) 객체들을 관리함으로써 응집도를 높이고 결합도를 낮추는 객체지향의 원칙을 지킬 수 있게 된다.
Spring IoC 컨테이너가 관리하는 자바 객체를 Bean 이라고 한다. 객체들을 빈에 등록하면 빈이 객체들을 관리해준다.
@Configuration
를 붙인 자바 설정파일에서 @Bean
을 이용하여 직접 빈을 정의하여 등록한다.@ComponentScan
이 포함되어있는 애노테이션(ex. @Controller
, @Service
, ...)을 사용하여 빈에 등록한다.DI(Dependency Injection)란 외부에서 의존성을 주입받는 것을 의미한다. 의존성 주입에는 여러 방법이 있는데,
DIP(Dependency Inversion Principle)란 의존 역전 원칙으로, 상위 레벨의 모듈이 절대 하위 레벨 모듈에 의존하지 않으며, 둘 다 추상화에 의존해야 한다는 원칙이다.
DI 기법으로 추상화에 의존하도록 하여, DIP를 만족함으로써 클래스 간 결합도를 낮출 수 있다.
https://www.youtube.com/watch?v=8lp_nHicYd4
https://velog.io/@dong_geon_kim/JAVA-4-DIP%EC%99%80-DI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0