ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 스프링 프레임워크 : DI (의존성 주입) / Spring Tools 3 설치
    º Server º/Spring 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를 이용하는 목적 : 수정이 빈번할 것 같은 객체를 스프링 환경설정이 관리하도록 하여 유지보수를 쉽게 하도록 합니다.

     

Coder yein