본문 바로가기
Web developer/Spring

[Spring] IoC & DI

by doongjun 2021. 7. 27.

IoC(Inversion of Control)

- 작업을 수행하는 쪽에서 Object를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는다.

- IoC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.

- Object는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수 없다.

- 모든 Object는 제어 권한을 위임받는 특별한 Object에 의해서 만들어지고 사용된다.

 

IoC 구현 방법

DL(Dependency Lookup) - 의존성 검색

저장소에 저장되어있는 Bean에 접근하기 위해 개발자들이

- 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 Lookup하는 것

 

DI(Dependency Injection) - 의존성 주입

- 각 계층 사이, 각 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결해주는 것

- 각 클래스 사이의 의존 관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

- DL 사용 시 컨테이너 종속성이 증가하여, 이를 줄이기 위해 DI를 사용

 

UserBean.java

//Bean클래스
public class UserBean {
	//필드는 private
	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;
	}
    
    	//getter, setter 메소드를 가진다. getName() setName() 메소드를 name 프로퍼티(property)라고 한다.
	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"></bean>

</beans>

bean 태그 하나를 입력했는데 위의 태그는 다음과 같은 의미를 가진다.

UserBean userBean = new UserBean();

ApplivationContext를 이용해서 설정파일을 읽어들여 실행

ApplicationContextExam01.java

package kr.or.connect.diexam01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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("kim");
		System.out.println(userBean.getName());
		
		UserBean userBean2 = (UserBean)ac.getBean("userBean");
		
		if(userBean == userBean2) {
			System.out.println("같은 인스턴스입니다.");
		}
	}
    
}

 

실행결과

 

출처 : https://isstory83.tistory.com/91

 

Spring - IoC & DI

IoC(Inversion of Control - 제어의 역전)란? IoC란 간단하게 말하여 프로그램의 제어 흐름 구조가 바뀌는 것이다. 일반적으로, main() 같은 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정,

isstory83.tistory.com

 

'Web developer > Spring' 카테고리의 다른 글

[Spring] MockMVC Test  (0) 2021.08.02
[Spring] Swagger를 사용하여 Web API 문서화 해보기  (0) 2021.08.02
[Spring] Annotation @정리2  (0) 2021.04.18
[Spring] Annotation @정리1  (0) 2021.04.18
[Spring] DAO와 Mapper의 차이  (0) 2021.04.18

댓글