
class A {
B b;
A(B b){
this.b = b;
}
}
class B {
B(){
}
}
위 코드를 보자.
A의 인스턴스를 생성하려면
A a = new A(new B());
A 생성자 필드에 B 인스턴스를 받아야하니, B또한 생성해야한다.
A의 생성자 필드값을 C 인스턴스로 수정하고 싶을때에도, 수정이 많이 필요하다.
이것을 'A가 B에 의존적이다' 라고한다.
- A가 B와 강한결합을 가지고 있다 라고도 한다.

의존적일때 발생하는 문제들
- 코드를 변경, 삭제하기 어렵다.
- 객체 지향적이지 못하다.
의존성을 최소화해야한다.
제어의 역전, IoC
- Inversion of Controll
- 설계원칙
- 의존성을 해결한다.


의존성 주입, DI
DI 패턴을 통해, IoC 원칙을 이룬다.
IoC Container
어떻게 A가 B에게 의존적인 관계를 바꿀 수 있는가

IoC Container가 객체들을 먼저 생성했을때 가능하다.
그때의 객체들 == bean
bean
bean으로 생성된 객체들은 class의 대문자가 소문자로 변한 이름으로 생성됨
@Component

- @Componet annotation을 사용하면, 숫자 7 옆에 bean 모양이 생긴다.
@Autowired
생성자 주입의 경우, 자동으로 생성되지만, 메소드 주입의 경우는 직접 입력을 해줘야함
@RequiredArgsConstructor
lombok으로 도 가능하게 함
3 layer Annotation
- @Controller
- @Service
- @Repository
수동으로 설정하기
- ApplicationContext
- Bean 이름으로 가져오기
- Bean 클래스로 가져오기