Object ⇒ 실체화가 가능한 것
Instance ⇒ 실체화 된 것
ex) 가구(추상적) ⇒ 의자, 침대 (Object) ⇒ 세상에 생겼을 때 Instance 가 되는 것
IoC 컨테이너
- 스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너
→ IoC를 실제로 구현하는 것
Bean
→ 스프링 컨테이너가 관리하는 객체
빈 팩토리(BeanFactory)
→ 빈들을 관리한다는 의미의 컨테이너
→ 객체의 생성과 객체의 사이의 런타임 관계를 DI 관점에서 볼 때의 컨테이너
ApplicationContext
→ BeanFactory에 여러가지 컨테이너 기능을 추가한 것
→ BeanFactory를 확장한 것
→ 스프링의 각종 부가 기능을 추가로 제공
1) 제어의 역전(Inversion of Control, IoC)
- 프로그램의 제어 흐름 구조가 바뀌는 것
- 일반적인 프로그램 흐름 구조 : 사용하는 쪽(개발자)에서 메서드(라이브러리) 호출
- 역전된 프로그램 흐름 구조 : 기반이 되는 쪽(프레임워크)에서 사용하는 쪽의 메서드 호출
- 즉, 어떠한 일을 하도록 프레임워크에 제어의 권한을 넘김으로써 개발자가 신경써야 할 것을 줄이는 전략
- 프레임워크에 정의된 인터페이스, 추상타입을 개발자가 구현함으로써 객체를 프레임워크에 주입함(Dependency Injection, DI)
2) DI(Dependency Injection)
- 의존성 주입
- 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
DI가 적용 안된 예 (개발자가 직업 인스턴스를 생성)
class 엔진 {
}
class 자동차 {
엔진 v5 = new 엔진();
}
Spring에서 DI가 적용 된 예 (컨테이너가 v5 변수에 인스턴스를 할당해줌)
@Component
class 엔진 {
}
@Component
class 자동차 {
@Autowired
엔진 v5;
}
'Web & Android > SpringBoot' 카테고리의 다른 글
[SpringBoot] AOP(Aspect Oriented Programming) (0) | 2023.08.12 |
---|---|
[SpringBoot] OOP(Object Oriented Programming) (0) | 2023.08.12 |
[SpringBoot] Spring Boot (0) | 2023.08.12 |
[SpringBoot] Spring (0) | 2023.08.12 |
[SpringBoot] 라이브러리와 프레임워크 (0) | 2023.08.12 |