-
[스프링] IoC, DI스프링 2023. 10. 4. 23:25728x90
스프링
IoC 컨테이너
‘제어의 역전’의 약어이며, 일종의 디자인 패턴중 하나 이다.
컨테이너는 보통 객체[ POJO ]의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이다.
이 말은 객체[ POJO ]의 생성 및 생명주기 등 객체[ POJO ]의 모든 제어권이 바뀌었단 말이다.
결론, 객체[ POJO ]의 제어권이 “ 나(개발자) → 컨테이너 “ 이동한단 말이다.
POJO란, 주로 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object를 지칭한다.
-> Java Bean 객체가 대표적이다.빈 등록방법
- @Component
- @Bean
IoC 사용이유
- DI → 객체를 new해서 생성 하지 않고, IoC 컨테이너에 존재하는 Bean 주입하면, 싱글톤 문제 및 편의성 등등 상승!
- 객체의 scope → IoC컨테이너가 해당 객체 scope 관리해줌
- 라이플 사이클 인터페이스 지원 → 클래스 단위테스트시에 테스팅 지원
결론 인스턴스의 생명주기를 내가 아닌 컨테이너가 해주니까 우리는 로직에 집중할 수 있으며, new를 안쓰는 등 객체 생성 코드가 없으니까 TDD가 용이하다!
IoC 컨테이너 class
IOC 컨테이너에는 BeanFactory.class, ApplicationContext.class핵심적인 2가지의 클래스가 있다.
- BeanFactory : 자바 객체(bean) 인스턴스를 생성, 설정, 관리하는 실질적인 컨테이너이다.
- ApplicationContext : BeanFactory를 상속받는 BeanFactory의 확장 버전이다.
ApplicationContext에서 확장된 기능
- 국제화가 지원되는 텍스트 메시지를 관리 해준다.
- 이미지같은 파일 자원을 로드할 수 있는 포괄적인 방법을 제공해준다.
- 리스너로 등록된 빈에게 이벤트 발생을 알려준다.
IoC는 DL과 DI 2가지가 있다
DL : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lockup하는 것이다
DI : 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
-> DL 사용시 컨테이너의 종속이 증가하기에 DI를 사용한다.
DI
의존성 주입은 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해줌으로써, 프로그램 디자인 결합도를 느슨하게 되도록하고, 의존관계 역전 원칙과 단일 책임 원칙을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리하는 것이다
의존성을 주입하는 방법
- Setter Injection (수정자 주입)
- Constructor Injection (생성자 주입)
- Method Injection (필드 주입)
'스프링' 카테고리의 다른 글
[스프링] Spring Security (0) 2023.10.24 [스프링] 아키텍쳐 (0) 2023.10.10 [스프링] jar, war 차이점 (0) 2023.02.01 [스프링] Loging 로깅 (0) 2023.02.01 [스프링] JDK17사용시에 주의할 점 (0) 2023.01.27