
IoC란, Inversion of Control의 약자로 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의
관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말한다.
스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지
해당 객체에 대한 관리를 직접 수행한다.

스프링에서 관리하는 객체를 ‘Bean(빈)’이라고 하고, 해당 빈들을 관리한다는 의미로
컨테이너를 ‘Bean Factory’라고 한다.



DI란, Dependency Injection의 약자로 IoC 구현의 핵심 기술이라고 할 수 있다.
사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것을 의미한다.
이렇게 의존성을 주입 받게 되면 이후 해당 객체를 수정해야 할 상황이 발생했을 때 소스 코드의 수정을 최소화 할 수 있다.
의존성을 주입 받는 Setter 메소드를 만들고, 이를 통해 의존성을 주입
필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입
의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입
Setter 메소드를 통해 의존 관계가 있는 Bean을 주입하려면 <property> 태그를 사용한다.
<bean id=“객체의 이름" class=“클래스 풀네임“>
<property name=“name” value=“OOO”/>
<property name=“name” ref=“OOO”/>
</bean>
<bean id=“student" class=“com.kh.spring.person.model.vo.Student“>
<property name=“name” value=“홍길동”/>
<property name=“wallet” ref=“money”/>
</bean>
<bean id=“money” class=“com.kh.spring.wallet.model.vo.Wallet” />
Constructor를 통해 의존 관계가 있는 Bean을 주입하려면 <constructor-arg> 태그를 사용한다.
<bean id=“불러 올 객체" class=“클래스 풀네임“>
<constructor-arg index=“0” value=“OOO”/>
<constructor-arg name=“OOO” ref=“OOO”/>
</bean>
<bean id=“student" class=“com.kh.spring.person.model.vo.Student“>
<constructor-arg index=“0” value=“홍길동“/>
<constructor-arg index=“1” ref=“money”/>
</bean>
<bean id=“money” class=“com.kh.spring.wallet.model.vo.Wallet” />