룽쓰의 개발도구

Spring 컨테이너 예시를 알아보자 본문

개발 용어/Spring

Spring 컨테이너 예시를 알아보자

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

앞선 글에서 Spring에서 컨테이너가 하는 역할에 대해서는 알아봤다.

그럼 쉬운 예시를 한 번 알아보도록 하자.

 

[ A. TV interface ]

package org.zerock.polymorphism;

public interface TV {

	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
	
}

 

 

[ B. LgTV ]

package org.zerock.polymorphism;

public class LgTV implements TV{

	public void powerOn() {
		System.out.println("LgTV---전원이 켜졌습니다.");
	}

	public void powerOff() {
		System.out.println("LgTV---전원이 꺼졌습니다.");
	}

	public void volumeUp() {
		System.out.println("LgTV의 볼륨이 올라갔습니다.");
	}

	public void volumeDown() {
		System.out.println("LgTV의 볼륨이 내려갔습니다.");
	}
}

 

 

[ C. applicationContainer.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="tv" class="org.zerock.polymorphism.SamsungTV"></bean> -->
	<bean id="tv" class="org.zerock.polymorphism.LgTV"></bean>
	
</beans>

 

 

[ D. 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("applicationContext.xml");

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

 

A에서는 LGTV를 생성하기 위한 인터페이스를 만들었다.

B에서는 TV 인터페이스를 구현한 LGTV 클래스를 만들었다.

C가 말하고자 하는 컨테이너이다.

bean을 통해서 LgTV클래스를 id="tv"에 넣음으로써 D에서 불러올 수 있도록 했다.

D에서 내가 불러올 xml을 설정한 뒤, 그 안에 있는 원하는 id값을 getBean으로 들고 오기만 하면 끝이다.

 

여기서 주목할 점은 JAVA에서 원래 기본적으로 했던 TV tv = new LgTV();를 하지 않았다는 것을 주목해야 한다.

사용할 때마다 새로운 객체를 생성하게 되면 메모리 낭비가 심해지고, 하나의 객체로 관리하고 싶을 때는 부가적인 코딩이 많이 들어가게 된다. 하지만 bean으로 생성하게 되면, 싱글톤 패턴을 default값으로 갖고 있기 때문에 같은 객체를 사용하게 되는 것이다. 

 

TV tv2 = (TV) factory.getBean("tv");

즉, D에 위와 같은 코드를 삽입하게 된다 해도 tv == tv2는 true. 동일한 객체다.

'개발 용어 > Spring' 카테고리의 다른 글

Spring에서 List란?  (0) 2021.04.30
Property와 Constructor는 무엇일까?  (0) 2021.04.29
스프링 AbstractApplicationContext란?  (0) 2021.04.29
Spring 컨테이너란?  (0) 2021.04.29
Spring 프레임워크란 무엇인가?  (0) 2021.04.28