Ioc와 DI
2023. 2. 28. 17:08ㆍ카테고리 없음
- IoC란 Inversion of Control의 줄임말이며, 제어의 역전이라고 한다.
- 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 스프링 컨테이너가 담당한다.
- 이를 스프링 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.
- 따라서, 스프링 컨테이너를 IoC 컨테이너라고도 부른다.
IoC 컨테이너의 가장 기초적인 역할을 오브젝트를 생성하고 이를 관리하는 것이다. 스프링 컨테이너가 관리하는 이런 오브젝트는 빈이라 부른다. 설정 메타 정보는 바로 이 빈을 어떻게 만들고 어떻게 동작하게 할 것인가에 관한 정보이다.
스프링 컨테이너는 자바 코드, XML, Groovy 등 다양한 형식의 설정 정보를 받아들일 수 있도록 유연하게 설계되어 있다.
IoC 컨테이너란?
- 스프링에서는 IoC를 담당하는 컨테이너를 빈 팩토리, DI 컨테이너, 애플리케이션 컨텍스트라고 부른다.
- 오브젝트의 생성과 오브젝트 사이의 런타임 관계를 설정하는 DI 관점으로 보면, 컨테이너를 빈 팩토리 또는 DI 컨테이너라고 부른다.
- 그러나 스프링 컨테이너는 단순한 DI 작업보다 더 많은 일을 하는데, DI를 위한 빈 팩토리에 여러 가지 기능을 추가한 것을 애플리케이션 컨텍스트라고 한다.
- 정리하자면, 애플리케이션 컨텍스트는 그 자체로 IoC와 DI 그 이상의 기능을 가졌다고 보면 된다.
궁금증!
ioc는 왜 필요한가 ?
->생명주기를 관리
생명주기를 프레임 워크가 관리해야 하는 이유?
-> 프레임 워크가 기능을 제공하기 위해서 이다 .
프레임 워크가 사용자에게 제공해주는 기능은 ?
->AOP 기능,로깅, 인증,인가등
제공해줄려면 어떻게 해야 하는 가?
->프록시가 되어야 한다 , 그럴려면 원본 인스턴스를 프레임 워크가 가지고 있어야 한다.
프레임 워크가 가질 수 있는 방법?
-> 스프링이 스프링 빈을 등록해야 한다 ,, 스프링은 빈을 관리 한다
DI - 의존 관계 주입
“A가 B를 의존한다”는 굉장히 추상적인 표현이지만, 토비의 스프링에서는 “의존 대상 B가 변하면, 그것이 A에 영향을 미친다”고 한다. 즉, B의 기능이 추가되거나 변경되면 그 영향이 A에 미치는 것이다.
DI:스프링은 의존성이 있다, 스프링은 빈들의 목록을 만들고 어떤게 필요한지 ,필드를 통해 세팅을 해준다, 주입 방식은 다양한데, 생성자 주입, 필드주입, 수정자 주입등이 있다.