Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크
Java로 다양한 어플리케이션을 만들기 위한 프로그래밍 툴
Spring 프레임워크 특징
1. IoC (Inversion of Control, 제어 반전)
- 객체의 생성부터 소멸까지 개발자가 직접 하는 것이 아닌 Spring Container가 대신해주는 것
- 제어권이 개발자가 아닌 IoC에 있으며, IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸해 생명주기를 관리한다.
- IoC 객체 : 제어권이 외부에 있는 객체
// 1. 일반 객체 생성
class Sample {
private Apple apple = new Apple();
}
// 2. IoC 객체
class Sample {
private Apple apple;
public Sample(Apple apple){
this.apple = apple;
}
}
class SampleTest {
Apple apple = new Apple();
Sample sample = new Sample(apple);
}
- Apple 객체의 제어권이 Sample에 있는 것이 아닌 SampleTest에게 있다.
- 의존성을 역전시켜 제어권을 직접 갖지 않는 것이 IoC
2. DI (Dependecy 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 ExampleComponent(ConstructorService constructorService) {
this.constructorService = constructorService;
}
3. AOP (Aspect Object Programming, 관점 지향 프로그래밍)
- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것
- 기능을 비즈니스 로직과 공통 모듈로 구분한 후, 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직을 삽입해 실행되도록 한다.
- AOP는 공통관심(로깅, 보안)을 따로 빼내어 객체별로 처리하는 것이 아닌 관점별로 외부에서 접근해 사용하도록 만든다.
4. POJO (Plain Old Java Object 방식)
- 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트
- getter / setter 같이 기본적인 기능만 가진 Java Object
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
'Sesac 웹 풀스택[새싹X코딩온] > Spring' 카테고리의 다른 글
6. JPA(Java Persistence API) 및 실습 (0) | 2023.03.16 |
---|---|
5. JDBC, MyBatis 연결 (0) | 2023.03.16 |
4. GET, POST 방식 및 DTO, VO 전송 (0) | 2023.03.16 |
3. Rest API 정의(DTO,VO, Annotation) (0) | 2023.03.11 |
2. Spring Boot 사용하기(feat: Intellij, Spring initializer, thymeleaf) (0) | 2023.03.09 |