티스토리 뷰

Spring/인프런 - Spring

1. 스프링 개요

GrapeMilk 2020. 3. 3. 17:11

Goal 

 - 스프링 프레임워크가 무엇인지 알아본다.

 - 스프링 프레임워크의 모듈들을 알아본다.

 - 스프링 컨테이너에 대해 알아본다.

 

1. 스프링 프레임워크

 - 스프링 프레임워크는 주요기능으로 DI, AOP, MVC, JDBC 등을 제공한다.

 - DI : Dependency injection, 필요할 때 주입하여 사용 

 - AOP : 관점 지향 프로그래밍, 공통된 부분을 뽑아 사용하는 것.

 

1) 그림으로 프레임 워크 이해하기

 - 프레임 워크 : 개발작업을 용이하게 하기 위해 개발자들이 추상적으로 정의해 놓은 틀.

 - 운전자가 네이게이션없이 운전하면, 목적지를 찾기 위해 여러가지 길을 탐색해야 하듯이, 프레임워크가 없으면 틀을 잡기 위해 시간이 많이 걸린다. 하지만 프레임워크가 있으면, 해당 틀에 따라 작업을 진행하면 되기 때문에 작업이 용이해진다.

 

2. 스프링 프레임워크 모듈

 - 모듈 : 추상적인 툴, 모듈들이 스프링을 구성한다. 사용자는 모듈을 구현함으로서 용이하게 작업을 수행할 수 있다.

 

2-1 스프링 프레임워크에서 제공하고 있는 모듈

 1) spring-core

  - 스프링의 핵심인 DI(Dependency Injection)와 IoC(Inversion of Control)를 제공

 2) spring-aop

  - AOP구현 기능 제공 

 3) spring-jdbc

  - 데이터베이스를 쉽게(적은 양의 코드) 다룰 수 있는 기능 제공

 4) spring-tx

  - 스프링에서 제공하는 트랜잭션 관련 기능 제공

 5) spring-webmvc

  - 스프링에서 제공하는 컨트롤러(Controller)와 뷰(View)를 이용한 스프링MVC 구현 기능 제공

 

- 스프링 프레임워크에서 제공하고 있는 모듈을 사용하려면, 개발 프로젝트에 XML 파일등을 이용하여 모듈에 대한 의존설정을 하면 된다.

- 즉, 모듈은 코드로 구성되어 있는 라이브러리이기 때문에, 어딘가에서 제공된 라이브러리를 -> 개발하고 있는 프로젝트에 삽입하여 구현하면 된다. XML파일에 명시하면, 프로그램이 해당라이브러리를 다운로드한다.

 

 

3. 스프링 컨테이너 (IoC)

  - 스프링에서 객체를 생성하고 조립하는 컨테이너(container)로, 컨테이너를 통해 생성된 객체를 빈(Bean)이라고 부른다. 

  - XML문서를 이용하여 객체생성 및 속성 데이터 작성 -> 스프링 컨테이너에서 bean을 생성하고 조립 -> 애플리케이션 구현

 

3-1 스프링 컨테이너 예제구현

 

 - 컨테이너 예제 구현을 통해 스프링에서 DI를 하는 과정을 직접 실습해본다.

 - Controller 클래스인 MyCalculator는 Calculator를 사용하지만, 직접 객체를 생상하지는 않고, 외부에서 Calculator를 생성하여, MyCalculator의 생성자를 통해 받아온다.

 - 이렇게 되면, 의존성(Calculator)를 생성하는 일은 더 이상 Controller의 일이 아니므로 제어권이 역전되었다고 한다. 의존성을 주입하는 역할을하는 것을 컨테이너라고 하고, 객체의 생성은 외부에서 하기 때문에 제어권이 역전됐다고 해서 IOC 컨테이너라고 한다. 

 

 

1) MainClass.java

import operator.CalAdd;
import operator.CalDiv;
import operator.CalMul;
import operator.CalSub;

public class MainClass {

    public static void main(String[] args) {
       
        MyCalculator cal;
        
        cal = new MyCalculator(10, 5, new CalAdd());
        cal.result();
        
        cal = new MyCalculator(10, 5, new CalSub());
        cal.result();
        
        cal = new MyCalculator(10, 5, new CalMul());
        cal.result();
        
        cal = new MyCalculator(10, 5, new CalDiv());
        cal.result();

    }

}

2) Mycalculator

 - Spring에서 컨테이너와 비슷한 기능을 수행함.

 - Mycalculator를 불러올 때, 외부 객체인 Calculator를 생성자에 넣어줌. 즉, Mycalculator에는 또 다른 객체가 들어있음. 내가 필요한 객체를 외부에 만들어 놓고, 그 객체를 Mycalculator에다 주입하여 외부 객체의 기능을 사용할 수 있게 됨.

 - 외부 객체를 담는 컨테이너.

import operator.Calculator;
public class MyCalculator {

    public int fNum, sNum;
    public Calculator cal;
    
    public MyCalculator(int fNum, int sNum, Calculator cal) {
        this.fNum = fNum;
        this.sNum = sNum;
        this.cal = cal;
    }
    
    public void result() {
        int value = cal.calculator(this.fNum, this.sNum);
        System.out.println("result : " + value);
    }
    
    public Calculator getCalculator() {
        return cal;
    }
    
    public void setCalculator(Calculator cal) {
        this.cal = cal;
    }
    
    public int getfNum() {
        return fNum;
    }
    
    public void setfNum(int fNum) {
        this.fNum = fNum;
    }
}

 

3) operator 패키지의 Calculator

 - 외부 객체를 정의한 operator패키지의 Calculator 인터페이스.

 - Calculator인터페이스를 implement하여 계산의 기능을 담당하는 객체를 operator 패키지에 모아놓음.

 - 컨테이너는 operator패키지에서 원하는 기능을 사용함.

package operator;

public interface Calculator {
    public int calculator(int firstNum, int secondNum);
}

 

스프링을 한줄로 이해하면,

 

 

기존의 작업에서 자주쓰이는 기능들과, 중복되는 코드들을 모아서 모듈로 구현한 시스템.

 

댓글