- 강한결합
- 구현 클래스 직접 참조
- 각 controller에서 필요한 sevice, repository 객체 각각 생성
- repository1 생성자가 변경된다면 모든 sevice와 controller의 코드도 변경되어야함
- 느슨한 결합
- 각 객체에 대한 객체 생성은 1번만 하고 생성된 객체를 모든 곳에 사용
- 추상화에 의존
DI(Dependency Injection, 의존성주입)
의존성 주입은 프로그램 디자인이 결합도를 느슨하게 되도록하고 의존관계 역전 원칙과 단일 책임 원칙을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리
하는 것이다.
- 의존관계를 외부에서 결정
- 외부의 대상이 IoC 컨테이너가 되어, 빈(스프링 객체)을 알아서 주입해 준다.
IoC(Inversion of Control, 제어의 역전)
- 프로그램 제어의 흐름이 뒤바뀜
- 용도에 맞게 필요한 객체를 가져다 사용
스프링 IoC 컨테이너