티스토리 뷰

반응형

1.IoC

IoC(Inversion of Control)는 우리말로 '제어의 역전'이라고 번역하여 사용하고 있습니다.

 

토비의 스프링 3.1에서는 IoC를 아래와 같이 설명하고 있습니다.

 

스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신
독립된 컨테이너가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.
그래서 스프링 컨테이너를 IoC 컨테이너라고도 한다.

 

즉 프로그램에 대한 흐름을 개발자가 아닌, 프레임워크가 주도하며 관리하기 때문에 제어의 흐름이 바뀌었다고 하여 제어의 역전이라고 부릅니다. 이러한 제어의 흐름을 스프링 프레임워크가 주도하기 때문에, 객체를 Spring Bean으로 등록하여 DI(Dependency Injection) 즉 의존 주입을 할 수 있습니다.

 

Bean이란 자바 객체를 생각하시면 됩니다. 그러나 Spring에서는 IoC 컨테이너가 관리하는 객체로 설정된 자바 객체를 Bean이라고 보통 부릅니다. 의존성 주입을 받으려면 이러한 자바 객체를 Spring Bean으로 등록을 해야 합니다. Spring Bean으로 등록되면 의존성 및 객체의 범위(ex singleton, prototype..), 라이프 사이클  등을 관리할 수 있는 장점이 있습니다.

 

IoC를 컨테이너라고 말하는 이유는, 화물 운송에 주로 쓰이는 철제 상자 컨테이너와 같이 격리된 공간에서 IoC가 관리하는 객체인 Spring Bean들을 읽어 들이고 구성 및 제공하여 관리하기 때문에  IoC컨테이너라고 합니다.

 

https://055055.tistory.com/9?category=852871

 

스프링의 DI(Dependency Injection) 이란?

예전에는 책을 읽어도 제대로 이해가 되지 않아서, 그냥 가볍게 읽고 넘어 갔던 부분이었습니다. 그러나 지금 개발을 제대로 하려고 노력하며 다시 책을 꺼내 읽어보니.... 아주 조금은?? 이해가 되는 것 같습니다..

055055.tistory.com

 

2.BeanFactory / ApplicationContext

스프링에서 IoC를 담당하는 컨테이너를 BeanFactory(빈 팩토리) 또는 ApplicationContext(애플리케이션 컨텍스트)라고 부르기도 합니다. 객체의 생성과 객체 사이의 런타임 관계를 설정하는 단순 DI(Dependency Injection) 관점으로 볼 때는 컨테이너를 BeanFactory라고 합니다. 그러나 스프링 컨테이너는 단순한 DI 작업 보다 더 많은 일들을 합니다. DI를 위한 BeanFactory에 엔터프라이즈 애플리케이션을 개발하는 데 필요한 여러 가지 기능을 추가한 것을 ApplicationContext라고 부릅니다.  

 

BeanFactory와 ApplicationContext에 대해 이야기 하자면, 먼저 BeanFactory는 스프링 IoC컨테이너 최상위에 있는 인터페이스입니다. 그리고 ApplicationContext는 BeanFactory의 서브 인터페이스들인 ListableBeanFactory와 HierachicalBeanFactory라는 두 개의 인터페이스를 상속하기 때문에 BeanFactory를 상속하고 있습니다. 

 

BeanFacotry가 Bean 생성 및 LifeCycle을 관리한다면, ApplciationContext는 Bean관리 뿐만 아니라 리소스 로딩, 이벤트 발행, 다국어 등의 추가적인 기능들을 갖고 있기 때문에 더 많이 사용하고 있습니다.

1, ResourceLoaderAware's setResourceLoader   
2. ApplicationEventPublisherAware's setApplicationEventPublisher 
3. MessageSourceAware's setMessageSource  
4. ApplicationContextAware's setApplicationContext 

 

 

 

 

출처 : 스프링 프레임워크 핵심 기술 - IoC 컨테이너 1부 : 스프링 IoC 컨테이너와 빈  : 백기선

         토비의 스프링 3.1 : 이일민

        https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html

 

BeanFactory (Spring Framework 5.1.9.RELEASE API)

The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such as ListableBeanFactory and ConfigurableBeanFactory are available for specific purposes. This interface is implemented by ob

docs.spring.io

        https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html

 

ApplicationContext (Spring Framework 5.1.9.RELEASE API)

Expose AutowireCapableBeanFactory functionality for this context. This is not typically used by application code, except for the purpose of initializing bean instances that live outside of the application context, applying the Spring bean lifecycle (fully

docs.spring.io

 

반응형

'jvm언어관련 > Spring(SpringBoot)' 카테고리의 다른 글

springboot redis (NoSQL) 사용  (0) 2019.12.25
restdocs XPath사용  (0) 2019.12.09
HttpMessageConverters  (0) 2019.07.14
Springboot Http/Https 사용하기(멀티 커넥트)  (0) 2019.05.20
springboot maven profiles 설정  (0) 2019.05.01
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함