✍IOC(Inversion of Control, 제어 반전)
: IOC란, Inversion of Control의 약자로 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말한다. 스프링은 IOC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행한다.
IOC 컨테이너
: 스프링에서 생성하고, 관리하는 객체를 ‘Bean(빈)’이라고 하고, 해당 Bean을 만들어 낸다는 의미로 IOC컨테이너 내부 최상위 인터페이스의 이름을 ‘Bean Factory’라고 한다.
IOC 컨테이너의 역할
1. 객체의 생명주기와 의존성을 관리한다.
2. VO (DTO / POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당한다.
3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.
✍Spring DI (Dependency Injection, 의존성 주입))
: IOC 구현의 핵심 기술이라고 할 수 있다. 사용하는 객체를 직접 생성하여 만드는 것이 아니라
컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것을 의미한다.
이렇게 의존성을 주입 받게 되면 이후 해당 객체를 수정해야 할 상황이 발생했을 때 소스 코드의 수정을 최소화 할 수 있다.
장점
1. 개발자가 작성해야 할 코드가 단순해진다.
2. 각 객체 간의 종속 관계(결합도)를 해소할 수 있다.
* 객체간의 종속 관계 (결합도) : 한 클래스에서 필드 객체를 생성할 때 발생하는 두 객체 간의 관계를 말하며, 각 객체간의 내용이 수정될 경우 영향을 미치는 정도를 나타낸다.
종류
Setter 메소드 | 의존성을 주입 받는 Setter 메소드를 만들고, 이를 통해 의존성을 주입 |
생성자 | 필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입 |
메서드 | 의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입 |
Setter 메소드를 통한 의존성 주입
Setter 메소드를 통해 의존 관계가 있는 Bean을 주입하려면 <property> 태그 사용
XML 선언
<bean id=“student" class=“com.spring.person.model.vo.Student“>
<property name=“name” value=“ㅇㅇㅇ”/>
<property name=“wallet” ref=“money”/>
</bean>
<bean id=“money” class=“com.spring.wallet.model.vo.Wallet” />
- name 속성 : Class에서 선언한 필드 변수의 이름
- value 속성 : 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용
- ref 속성 : Bean 이름을 이용해 주입할 Bean을 찾음
생성자를 통한 의존성 주입
Constructor를 통해 의존 관계가 있는 Bean을 주입하려면 <constructor-arg> 태그 사용
XML 선언
<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” />
- Constructor 주입 방식은 새엉자의 파라미터를 이용하기 때문에 한번에 여러 개의 객체 주입 가능
- 필드 선언 순서에 따라 index 속성을 통해서도 접근이 가능하다.
반응형
'Backend > Spring' 카테고리의 다른 글
[Spring] 로그인, 아이디 저장, 로그아웃 (0) | 2022.01.06 |
---|---|
[Spring] Mybatis 개요, 설정 + Mapper, 로그인 기능 (0) | 2022.01.05 |
[Spring] Spring Framework (0) | 2022.01.04 |
[Spring] 프로젝트 세팅 (0) | 2022.01.01 |
[Spring] 단축키 설정 (0) | 2021.12.31 |