fastcampus java 강의를 보면서 정리를 한 것입니다.
Spring IoC의 핵심
의존성 하나 이상의 오브젝트로 실행 되는데, 오브젝트들 간에 함께 의존하고 있음
Di 예제
public Main(){
public static void main(String []args){
B b = new B(true);
A a = new A(b);
a.println();
}
}
객체가 객체를 의존하고 있으면, 코드 유지보수가 어려워짐
디커플링 할수록 간결하게 변화함
코드에서 관계를 맺어주는것이 아니다.
의존성을 상위 코드에서 생성하여 객체를 주입하므로 a 에서는 B에 의존하는 값을 가지고 있지 않아도된다.
이것을 framework 화 한것이 IoC Container
설정을 보고 관계를 눈으로 미리 볼수 있다.
비지니스 로직만 집중할 수 있음 .
테스트를 더 쉽게 가능하다.
생성자 주입 / setter 주입
생성자 주입
객체가 생성될때 만들어짐
public class A{ private B b; public void setB(B b){ this.b=b; } ... }
<bean id="a" class="kr.co.fastcampus.cli.di.A"> <constructor-arg ref="b"/> </bean> <bean id="b" class="kr.co.fastcampus.cli.di.B"> <constructor-arg value="true"></constructor-arg> </bean>
Setter 주입
코드가 돌다가 객체가 언제든지 관계가 재설정이 되었을 때
<bean id="a" class="kr.co.fastcampus.cli.di.A"> <property name="b" ref="b"/> </bean> <bean id="b" class="kr.co.fastcampus.cli.di.B"> <constructor-arg value="true"></constructor-arg> </bean>
circulate Dependency
상호 참조 dependecy 서로 참조를 하게 되면 stack overflow가 발생할수 있음.
'BackEnd > Spring' 카테고리의 다른 글
Bean Scope (0) | 2020.02.11 |
---|---|
ClassPath Scanning and Managed Components (0) | 2020.02.08 |
Customizing the Nature of a Bean (0) | 2020.02.01 |
Spring-Core (0) | 2020.01.19 |
SpringCore - IoC Container(1) (0) | 2020.01.19 |