Notice
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
관리 메뉴

Jade_o.o

[Spring] Spring 개념과 특징 본문

Spring

[Spring] Spring 개념과 특징

by jade 2024. 5. 22. 19:01
Spring 이란?
엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크

 

 

Spring Architecture

 

Spring 프레임 워크 특징
• 1) IoC ( Inversion of Control, 제어 반전 )
• 2) DI ( Dependency Injection, 의존성 주입 )
• 3) AOP ( Aspect Object Programming, 관점 지향 프로그래밍 )
• 4) POJO ( Pain Old Java Object 방식 )

 


특징 1) IoC ( Inversion of Control, 제어 반전 )
• 객체의 생성부터 소멸까지 개발자가 아닌 스프링 컨테이너가 대신해주는 것
• 제어권이 개발자가 아닌 IoC 에 있으며, IoC 가 개발자의 코드를 호출해 필요한 객체 를 생성, 소멸해 생명주기를 관리한다

 

1. Java에서 객체 생성

=>  Sample 클래스에서 new 키워드로 Apple 클래스의 객체 생성

class Sample {
	private Apple apple = new Apple():
    }

 

2. 스프링 컨테이너가 객체 관리

=> Apple 객체의 제어권이 Sample 에 있는 것이 아닌, SampleTest 클래스에게 있음

=> 의존성을 역전시켜 제어권을 직접 갖지 않는 것이 IoC

class Sample{
	private Apple apple;
    
    public Sample(Apple apple){
    this.apple = apple;
    }
}

class SampleTest{
	Apple apple = new Apple();
    Sample sample = new Sample(apple);
}

 

특징 2) DI (Dependency Injection, 의존성 주입)
• 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의됨
• 즉, 외부에서 객체를 주입 받아 사용함
• DI (의존성 주입) 방법으로 IoC (제어의 역전) 를 구현

“이를 통해 코드 간의 재사용률을 높이고, 모듈 간의 결합도를 낮출 수 있음”

 

방법1.  Field Injection (필드 주입)

@Autowired
private FieldService fieldService;

 

방법2.  Setter Injection (수정자 주입)

//Setter Injection
private SetterService setterService;

@Autowired
public void setSetterService(SetterService setterService) {
	this.setterService = setterService;
}

 

방법3. Constructor Injection (생성자 주입)

//Constructor Injection
private final ConstructorService constructorService;

@Autowired
public ExampleConponent(ConstructorService constructorService) {
	this.constructorService = constructorService;
}

 

특징 3) AOP (Aspect Object Programming, 관점 지향 프로그래밍)
• 어떤 로직을 기준으로 “핵심 관점”, “부가 관점”으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
• 기능을 비즈니스 로직과 공통 모듈로 구분한 후, 개발자의 코드 밖에서 필요한 시점에 비 즈니스 로직을 삽입하여 실행되도록 함

"여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 기법"

 

1. 계좌 이체와 입출금 로직을 처리할 때 공통적으로 로깅과 보안 작업을 수행해야 한다

2. 일반적으로 이 경우, 공통의 코드를 두 개의 로직에 모두 넣고 사용한다

3. AOP는 공통 관심(로깅, 보안)을 따로 빼내어 객체 별로 처리하는 것이 아닌 관점 별로 외부에서 접근해 사용하도록 만든다

"따라서 개발자는 핵심 관점 코드에만 집중할수 있다"


 

특징 4) POJO (Plain Old Java Object, 단순한 자바 오브젝트)
• 다른 기술을 사용하지 않고 순수 Java만을 통해서 생성한 객체
• ex. 필드, getter, setter만 존재하는 기본적인 Java 오브젝트
class Person {
	private String name;
    
    public String getName() {
    	return name;
    }
    
    public void setName(String name) {
    	this.name = name;
    }
}

 

• 왜 중요할까? • 외부 라이브러리를 import 해서 특정 객체를 사용한다면? (즉, POJO 가 아닌 객체)
• 해당 기술이 deprecated (더 이상 사용되지 않음) 되거나 새로운 기술로 변경되면 관련 코드를 모두 변경해야 하는 번거로움
• 해당 객체가 외부 라이브러리에 의존적인 상황 -> 좋지 않음

“객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트”

'Spring' 카테고리의 다른 글

[Spring] Thymeleaf 표현식과 문법  (0) 2024.05.22
[Spring] Spring Thymeleaf 템플릿 정의  (0) 2024.05.22
[Spring] Spring MVC  (0) 2024.05.22
[Spring] Spring Boot 개념과 특징  (0) 2024.05.22