티스토리 뷰
Inversion of Control / Dependency Injection
- Dependency Injection은 Inversion of Control 원칙을 구현하기 위한 방법. (IoC=DI)
- 컨테이너가 코드 대신 오브젝트의 제어권을 갖고 있어 IoC(제어의 역전)이라 한다.
- 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해주는 개념.
- 누군가가 Bean을 넣어주면 사용자는 활용만 할 뿐 그것이 무엇인지 모른다.
- POJO와 설정(Configuration Metadata)을 등록하고 IoC/DI Container에 주입시키면 Bean을 생성(인스턴스화)한다. 이 과정을 Dependency Injection 혹은 Inversion of Control이라 할 수 있다.
- Spring에서 제공하는 IoC/DI Container의 종류
- BeanFactory : IoC/DI에 대한 기본 기능을 가지고 있다. 요청이 왔을 때 객체를 만든다.(lazy-loading)
- ApplicationContext : BeanFactory의 모든 기능을 상속받고 추가로 트랜잭션처리, AOP 등의 처리를 할 수 있다. 즉시 객체를 만든다.(pre-loading)
장점
- 모듈 간의 의존성이 낮아진다.
- 프로그램의 수행과 구현을 분리할 수 있다.
- 프로그램 수정이 편하다.
소스코드
public class UserBean {
private String name;
private int age;
private boolean male;
public UserBean() {}
public UserBean(String name, int age, boolean male) {
this.name = name;
this.age = age;
this.male = male;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userBean" class="kr.or.connect.diexam01.UserBean"/>
</beans>
public class ApplicationContextExam01 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("초기화 완료!!");
UserBean userBean = (UserBean)ac.getBean("userBean");
userBean.setName("seogineer");
System.out.println(userBean.getName());
UserBean userBean2 = (UserBean)ac.getBean("userBean");
if(userBean == userBean2) {
System.out.println("같은 인스턴스입니다.");
}
}
}
결과
- 기본적으로 Singleton 패턴으로 bean을 생성하기 때문에 userBean과 userBean2가 같다.
즉, 메모리에 UserBean의 객체를 하나만 생성한다. - 이 같이 Singleton으로 객체를 대신 생성하고 관리해주는 기능을 IoC라 한다.
참조
https://www.boostcourse.org/web316/lecture/20656/
https://www.boostcourse.org/web316/lecture/254335/
https://starkying.tistory.com/entry/IoC-DI
'Framework > Spring' 카테고리의 다른 글
Spring JDBC 실습 (0) | 2021.01.04 |
---|---|
Spring JDBC (0) | 2021.01.04 |
Spring Container metadata 설정 방법 (0) | 2021.01.01 |
이클립스 maven 프로젝트에서 spring 라이브러리 추가 (0) | 2021.01.01 |
프레임워크와 라이브러리 (0) | 2021.01.01 |
댓글