Spring이란? (DI 와 IOC)

Spring

 Spring이란 JAVA기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다. 

  • 엔터프라이즈(Enterprise)급의 프로젝트를 처리하는 JaveEE가 사용하기가 어렵고 문제가 많았음.
  • Spring 은 JavaEE를 대체하기 위해서 나타난 프레임워크(Framework) 이다.  
자바의 에디션 종류 
1. JavaME(Mobile Edition) : 소규모 // 2. JavaSE(Standard Edition) : 표준 // 3. JavaEE(Enterprise Edition) :기업용

 

  • 그렇다고 해서 JavaEE가 사라진 것은 아니고 JavaSE + JavaEE 또는 JavaSE + Spring을 선택하여 프로젝트를 만들 수 있다 . ( 세개 다 사용할 수 있음) 


프레임  워크 (Frame Work)

 

프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 클래스들의 모음이다.

  • 프레임 워크는 어떠한 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조이자 약속이며, 소프트웨어 개발에 있어서 하나의 뼈대 역할은 함. 
  • 기본적인 설계나 필요한 라이브러리는 알아서 제공하고 개발자는 개발에만 집중하도록 하게 하는 것이 프레임워크이다.
기본적인 설계?
우리가 만드는 Maven, Gradle은 프로젝트의 전체적인 라이프 사이클을 관리해주는 도구를 말한다. 
더 이해하기 쉽게는 우리가 Maven 프로젝트를 생성시 만들어지는 전체적인 폴더가 기본적인 설계라고 생각하면 된다. 


Spring의 특징

 

DI(Dependency Injection) 의존성 주입

 

  • 하나의 객체를 생성할 때 그 객체의 속성을 외부에서 부터 정의가 가능하게 의존성을 연결 하는 것을 의존성 주입이라고 한다.
  • 예를 들면, person이라는 클래스가 있다고 보자 아래와 같이 person이라는 클래스의 name 변수는 person에서만 정의가 가능하게 만들어져 있다.  (이것을 강한결합이라고 함)
public class person {
    
    private Name name;
    
    public void setName() {
        name = new Name();
    }
}

 

  • 위의 코드는 오로지 자기 자신만 정의를 할 수 있는 코드로 의존성이 높은 코드이다.
  • 그렇다면 의존성 주입을 하면 코드가 어떻게 변하는지 확인해 보자.
public class person {
    
    private Name name;
    
    public void setName(Name name) {
        this.name = name;
    }
}

 

  • 이제는 person 클래스의 name은 외부로부터 받아서 정의를 할 수 있게 되었는데 이것을 의존성 주입이라고 한다. (이것을 느슨한결합이라고 함)

IoC(Inversion of Control) 제어의 역전

 

개발자가 메소드 객체를 호출하는 것이 아닌, 외부의 객체로부터 호출이 되는 것을 제어의 역전이라고 한다.

  • 결합도가 높은 코드를 쓰면은 큰 부품이 중간부품을 부르고 중간 부품이 작은 부품을 부르는 코드를 작성하게 된다.
  • 이것이 제어의 순방향이었다고 생각하면 IoC이해하는데 좀 더 쉽다. 

큰 부품 -> 중간 부품 -> 작은 부품

  • 느슨한 결합을 가진 코드로 다시 생각해보자 
  • 위 의 사진처럼 중간에 있는 작은 부품이나 중간 부품이 없다면 큰 부품은 완성이 될 수 없다. 이것이 바로 제어의 역전을 의미한다. 

작은 부품이 중간 부품을 부르게 되고 중간 부품이 큰 부품을 부르고 있다.


AOP(Aspect object Prgoramming) 관점 지향 프로그래밍

 

반복적으로 사용되는 검사기능들을 따로 분리하여 필요한 곳에 주입하는 하는 것

  • 코드를 짜다가 보면 로깅, 트랜잭션, 보안등 여러가지기능을 곳곳에 입력하여 확인을 하게 된다. 
  • 그러한 코드가 많아지다 보면 관리하기도 어렵고 반복작업이 늘어나게 되는 것인데, 그러한 작업을 메소드 처럼 불러오는 것이 AOP이다. 
  • 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법

POJO(Plain Old Java Object) 

 

재사용이 높은 순수한 자바 객체 즉, Getter와 Setter를 가진 오브젝트를 말한다.

  • POJO는 JavaEE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하며 나타난 용어이다. 
  • 인터페이스를 직접 구현하거나 상속 받을 필요가 없어 기존의 라이브러리를 지원하기 용이하고 객체가 가벼움. 
  • POJO 예시코드 
public class UserDTO {
	
	private String userName;
	private String userId;
	private String userPassword;
	
	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public String getUserId() {
		return userId;
	}
	
	public void setUserId(String userId) {
		this.userId = userId;
	}
	
	public String getUserPassword() {
		return userPassword;
	}
	
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	
}

'Backend > Spring' 카테고리의 다른 글

@Autowired @Quelifier @Component @Value  (0) 2023.01.07
Bean을 .xml 통해 만들어 보기  (0) 2023.01.07
모델(Model)  (0) 2022.11.29
HttpServlet  (0) 2022.11.29
웹 프로젝트  (0) 2022.11.28