Spring - DI, IoC

2020. 8. 11. 16:55개발공부/Spring

728x90

#08/11/20 - Day01

Spring - DI(Dependency Injection), IoC(Inversion of Control)

1. 개념

Spring은 뼈대를 잡는 것이고 사용법을 익히면 된다.

객체를 만들어놓고 필요할 때 꺼내쓰는 특징이 있는데, 그것을 각각 DI, IoC라고 부른다.

2. DI, IoC

 1) Ioc : Inversion of Control 프로그램을 제어하는 패턴
    제어의 역행이란 의미는 외부의 객체를 내부로 끌어와서 사용하기 때문이다.

 2) DI : Dependency Injection IoC 패턴의 구현방법 중 하나.

3. 사용방법

Spring 프로젝트를 생성하면 자동 생성된다고 한다. 처음 시작하는만큼 구동원리를 파악하기 위해

수동으로 구현해본다. 

	<bean id="res" class="com.spring.basic.ex01.Restaurant" >
    	<constructor-arg ref="chef" />
	</bean>

 → Restaurant 클래스 생성자 constructor는 chef를 참조해서 객체가 불려질 때 chef도 자동적으로 호출되게끔 해준다. 

public class Main {

	public static void main(String[] args) {
		
//		Chef chef = new Chef();
//		Restaurant res = new Restaurant(chef);
//		Hotel hotel = new Hotel(res);
//		hotel.reserveRestaurant();
		
		//spring 객체 뽑는 객체
		GenericXmlApplicationContext ct =
				new GenericXmlApplicationContext("classpath:test-config.xml");
		
		Hotel hotel = ct.getBean("hotel", Hotel.class);
		hotel.reserveRestaurant();
		
	}

}

 → 클래스 안에서 수동으로 뽑아줄 땐 GenericXmlApplicationContext 객체를 사용한다. 객체가 등록된 XML 위치를 지정해준다. 그리고 getBean 메서드를 활용해 가져올 객체명과 클래스 명을 써주면 된다.

4. 참고

 - Eclipse 개발환경: JSP 때와 달리 Maven Project를 생성해서 클래스와 객체등록을 해주었다. 몇 가지 설정과 디렉터리 역할을 알고 있으면 이후에 도움이 될 것 같아서 참고로 남긴다.

Eclipse Maven Project 생성

 1) 생성방법

- Maven Repo 사이트에서 spring-context 모듈 다운로드(text임)

- pom.xml 에 dependencies 태그 입력 후 복붙

 2) 디렉터리 역할

- src/main/java : class 생성

- src/main/resources :컨테이너 같은 XML sources 생성