룽쓰의 개발도구

Spring 컨테이너란? 본문

개발 용어/Spring

Spring 컨테이너란?

디벨로퍼룽쓰 2021. 4. 29. 23:10

지금부터 본격적으로 Spring에 대해서 알아볼 예정이다.

나도 공부 중에 있기 때문에 다소 난해한 단어, 정립되지 않은 설명이 적힐 수 있다.

 

#1. 컨테이너란 무엇인가?

우리가 흔히 알고 있는 컨테이너는 사진과 같이 '뭔가를 담을 수 있는 공간'이다. 스프링도 비슷하다.

예를 들어, 이클립스에서 사용자들의 요청을 /hello.do로 보냈을 때 어떻게 그 주소 값을 받아왔었나?

 방법 1) hello.do 파일을 만들어서 그곳에서 직접 값을 받기
 방법 2) web.xml에 servlet mapping을 통해서 hello.HelloServlet으로 이동하라고 설정하기

크게 보면 이렇게 두 방법이 있다.

스프링에서 컨테이너의 역할은 위 방법 중 2번의 방법과 같다.

 

컨테이너란?

미리 값을 설정해둘 수 있는 환경설정과 같은 곳.

 

 

[ A. Container.xml ]

<beans>
	<bean id="tv" class="polymorphism.SamsungTV"/>
</beans>

컨테이너라고 불리는 xml을 보면 이해하기 쉽다.

 

<bean>은 객체를 만들 때 사용하는 것이다. id를 내가 불러올 이름을 마음대로 적으면 되고, class는 그 객체가 위치한 곳을 적어주면 된다. 즉, polymorphism패키지 안에 있는 SamsungTV라는 클래스를 나는 객체로 만들어야!라는 말이다.

 

 

 

[ B. TVUser ]

package org.zerock.polymorphism;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TVUser {
	public static void main(String[] args) {

		AbstractApplicationContext factory = new GenericXmlApplicationContext("Container.xml");

		TV tv = (TV) factory.getBean("tv");
		tv.powerOn();
		tv.volumeDown();
		tv.volumeUp();
		tv.powerOff();
	}
}

다른 것 없이 바로 메인 메서드가 있는 클래스를 보면 답을 낼 수 있다.

메인 메서드의 첫 줄에 있는 코드는 Container.xml에 있는 것들을 읽어오겠다는 뜻이다.

그 Container.xml에는 <bean> 객체로 tv를 만들어 뒀기 때문에, TV tv = (TV) factory.getBean("tv");가 성립될 수 있다.

SamsungTV는 TV 인터페이스를 구현한 클래스로 다형성을 사용하기 위해서 TV로 받았고, getBean으로 넘어오는 객체는 Object 타입이라서 강제 형 변환을 통해서 TV객체의 타입으로 변환해줬다.

 

그리고 tv를 통해서 안에 있던 메서드들을 실행했다.

그 안에 있는 것들은 SamsungTV에서 정의했던 값들이 출력되게 된다.