º Server º/Spring

[Spring] 스프링 프레임워크 : DI (의존성 주입) / Spring Tools 3 설치

Poony 2023. 6. 27. 23:28

스프링의 기초

- 프레임워크란?

  1. → 무엇(어플리케이션)을 만들기 위한 구조(뼈대)를 말합니다.
  2. → 또, 우리나라의 공공프로젝트의 경우 ‘전자정부 표준 프레임워크 ‘ 환경에서 개발해야하는데 전자정부 프레임워크에 스프링이 채택되었습니다.
  3. → 즉, 자바 기반의 어플리케이션 개발을 용이하게 하는 구조 중 가장 인기 있는 구조가 ‘스프링’입니다.

 

  • 스프링 프레임워크 특징
  1. DI (Dependency Injection) : 의존성 주입

→ 자바로 만들어진 소프트웨어 속을 들여다보면 수많은 클래스들로 구성되어있습니다.

그 클래스들을 사용하기 위해서는 new연산자에 의하여 객체를 생성한 후 사용할 수 있어요.

 

또, 클래스와 클래스 사이에는 is a 관계 혹은 has a 관계가 있을 수 있어요.

만약, A,B 두개의 클래스가 has a 관계에 있다고 합시다. B클래스에서 A클래스를 사용한다고 할 때 처음 우리의 고객이 요청한대로 A클래스를 만들고 B를 만들고 있는 중에 혹은 서비스 중에 A대신에 K로 만들어 주세요! 라는 요청이 있다면, new A()라고 되어있는 코드를 일일이 new K()로 수정해야 할 것입니다.

 

만약 new A() 가 사용된 부분이 B뿐 아니라 수십개의 다른 클래스에서도 사용되었다면 일일이 수정하는 것은 번거로운 일이며 미처 수정되지 않은 부분이 있을 수 있습니다.

 

이와 같은 두개의 클래스(객체) 가 의존관계에 있을 때 수정이 요청될 것 같은 객체에 대한 생성을 자바 소스 코드 내에서 직접 new 연산자로 생성하지 않고 스프링(환경설정)이 대신 두 객체의 관계를 느슨하게 하여 설정하는 방식을 스프링의 “DI (의존성 주입) ”라고 합니다.

 

두 객체의 관계를 느슨하게 설정하기 위해 Spring으로 설정 파일을 생성

 

- XML파일을 손쉽게 만들어주는 플러그인 설치방법

 

1. 이클립스 → help → Spring 검색 → Spring Tools 3 설치

Spring Tools 3 설치

2. Spring IDE Core 체크

Spring IDE Core 체크

 

3. install할 때 뜨는 창에서 select all 하고 다운완료 → restart → Spring 설치완료

 

4. Spring Bean configuration File → beans.xml 생성 (객체 생성을 위한 new연산자를 대신하는 태그)

// beans.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="mb" class="exam03.MessageBeanEn"/>

</beans>

 

5. 실행해보기 

 

인터페이스 생성

public interface MessageBean2 {
	public void sayHello(String name);
}

클래스 생성

// MessageBeanEn.java

public class MessageBeanEn implements MessageBean2 {

	@Override
	public void sayHello(String name) {
		System.out.println("Hello, "+name);
	}
}
//MessageBeanJP.java

public class MessageBeanJP implements MessageBean2 {

	@Override
	public void sayHello(String name) {
		System.out.println("こんにちは, "+name);
	}
}

메인 실행 클래스에서 beans.xml 불러오기

// HelloApp.java

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

public class HelloApp {

	public static void main(String[] args) {
		try {
			Resource resource = new FileSystemResource("beans.xml");
			BeanFactory factory = new XmlBeanFactory(resource);
			// 이후 요구에 의해 객체를 바꿀 수 있도록 interface 부모 클래스(MessageBean2)로 해당 객체를 사용합니다.
			MessageBean2 mb = (MessageBean2)factory.getBean("mb");
			mb.sayHello("예인");
			
		} catch (Exception e) {
			System.out.println("예외발생: "+e.getMessage());
		}
	}
}

→ DI를 이용하는 목적 : 수정이 빈번할 것 같은 객체를 스프링 환경설정이 관리하도록 하여 유지보수를 쉽게 하도록 합니다.