제어 역전 IoC (Inversion of Control)
보통의 자바 개발에서는 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다. => 객체의 관리를 개발자가 직접 제어한다.
하지만 제어 역전을 특징으로 하는 스프링은 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(스프링 컨테이너 또는 IoC 컨테이너)에 위임한다. => 객체의 관리를 컨테이너에 맡긴다.
장점
제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다.
개발자는 비지니스 로직을 작성하는데 집중할 수 있다.
의존성 주입 DI (Dependency Injection)
사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
의존성 주입받는 방법 : 생성자를 통해
- 레퍼선스 객체 없이는 객체를 초기화할 수 없게 설계 가능하기 때문에 권장하는 방법!
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService) {
this.myService = myService;
}
}
관점 지향 프로그래밍 AOP (Aspect-Oriented Programming)
- OOP를 더욱 잘 사용하도록 돕는 개념
- 스프링의 아주 주용한 특징
기능을 구현할 때 "핵심 기능"과 "부가 기능"으로 구분해 각각 하나의 관점으로 보는 것
핵심기능: 비즈니스 로직이 처리하려는 목적 기능
ex) 상품 정보를 데이터베이스에 저장, 저장된 상품 정보데이터를 보여주는 코드
여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식
목적: 모듈화해서 재사용 가능한 구성을 만드는 것
AOP를 구현하는 방법: 스프링은 프락시 패턴을 이용한다.
728x90
반응형
'개발공부 > JAVA Spring' 카테고리의 다른 글
[Spring Boot] 엔티티 관련 어노테이션 (0) | 2023.02.20 |
---|---|
[Spring Boot] HTTP Request 어노테이션 - GetMapping, PostMapping, PutMapping, DeleteMapping (0) | 2023.02.18 |
gradle dependencies 의존성 관리 알아보기 (0) | 2023.01.29 |
JPA ddl-auto 옵션 종류 (0) | 2023.01.25 |
Spring 웹 계층 (0) | 2023.01.25 |
댓글