프로그래밍/Spring
[스프링부트] IoC, DI, 빈, 스프링 컨테이너, AOP, PSA
Rolen
2024. 10. 1. 22:20
- IoC (Inversion of Control) / 직역: 제어의 역전
1. 자바에서는 객체를 사용하기 위해서 객체를 직접 생성한다.
Public class ExJava() {
CrInstance a = new CrInstance();
}
2. IoC는 직접 생성, 제어를 하는 것이 아니라 외부(스프링 컨테이너)에서 관리하는 객체를 가져와서 사용하는 것
Public class ExJava() {
public CrInstance a; // 쉽게 생각한다면 변수를 생성하는 것과 같다.
}
- DI (Dependency Injection) / 직역: 의존성 주입
어떠한 클래스가 다른 클래스에 의존하고 있다는 것으로 객체를 직접 생성하지 않고 스프링 컨테이너에게 넘겨 받게 되는 것을 의미한다. + IoC 를 위한 것
Public class ExJava() {
@Autowired // 객체를 받는다.
CrInstance a; // 쉽게 생각한다면 변수를 생성하는 것과 같다.
}
- 빈
위의 두번째 코드에서처럼 주입받는 객체, 클래스 를 빈이라고 한다.
빈을 스프링 컨테이너에 등록하고 사용하는데 방법은 다영하게 있다.
그 중 한가지는 클래스 앞에 어노테이션 @Component 를 작성하면 된다.
빈은 쉽게 생각해서 스프링에서 제공해주는 객체라고 생각하면 된다.
@Component
public Class A {
}
- 스프링 컨테이너
빈의 Lifecycle을 관리하고 빈을 넘길 수 있게 DI를 지원한다.
- 관점 지향 프로그래밍
AOP (Aspect Oriented Programming)
핵심 관점, 부가 관점으로 나누어 모듈화 하는 것을 의미.
간단한 예시로, 전화발신을 위한 프로그램이 있을 때,
전화발신은 핵심 관점이고 이를 위한 번호 확인, 통신 연결 은 부가관점이 된다.
- PSA
Portable Service Abstraction / 일관된 서비스 추상화
다양한 기술들을 추상화하고 기술들을 유연하게 사용이 가능하도록 하는 것.
728x90