[IoC(Inversion of Control- 제어의 역전)란?]
: IoC란 프로그램의 제어 흐름 구조가 바뀌는 것
** 일반적인 프로그램의 흐름 구조는
main()과 같은 프로그램이 시작되는 지점에서 사용할 오브젝트를 결정, 생성하고, 생성된 오브젝트 내의 메소드를
호출하는 작업을 반복하는 구조이다.
즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조
** IoC는 제어 흐름의 개념을 거꾸로 뒤집는 개념이다. 오브젝트는 자신이 사용할 오브젝트를 스스로 생성하거나 선택하지 않는다.
모든 제어 권한을 자신이 아닌 다른 대상에게 위임하는 것
프로그램의 시작을 담당하는 main()같은 엔트리 포인트를 제외하면 모든 오브젝트는 제어 권한을 위임받은 특별한 오브젝트에 의해 결정되고
만들어지는 것
<IoC 개념 정리>
- 작업을 수행하는 쪽에서 Object를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는 것.
- IoC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.
- Object는 자신이 어떻게 생성되고 어떻게 사용되는 지 알 수 없다.
- 모든 Object는 제어권한을 위임받은 특별한 Object에 의해서 만들어지고 사용된다.
# IoC 구현방법
.DL (Dependency Lookup) - 의존성 검색
저장소에 저장되어 있는 빈(Bean)에 접근하기 위해서 개발자들이 컨테이너에서 제공하는 API를 이용하여
빈(Bean)을 Lookup 하는 것
.DI(Dependency Injection) - 의존성 주입
DL을 사용시에는 컨테이너에 대한 종속성이 증가하기 때문에, 이러한 종속성을 줄이기 위해서 DI를 사용
각 계층 사이, 각 객체(클래스)사이에 필요로 하는 의존 관계를 컨테이너가 자동으로 연결 해주는 것
각 클래스 사이의 의존 관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
- setter Injection
- constructor Injection
## IoC 용어 정리
.bean - 스프링에서는 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
자바빈, EJB의 빈과 비슷한 오브젝트 단위의 어플리케이션 컴포넌트를 의미.
스프링 빈은 스프링 컨테이너가 생성, 관계설정, 사용등을 제어해주는 오브젝트를 가리킨다.
.bean factory : 스프링의 IoC를 담당하는 핵심 컨테이너
빈을 등록/ 생성/조회/반환/관리 한다. bean factory를 바로 사용하지 않고 이를 확장한 Application Context를 이용한다.
BeanFactory는 bean factory가 구현하는 Interface 이다. (getBean()등의 메소드가 정의)
.application Context - bean Factory를 확장한 IoC 컨테이너
빈을 등록/생성/조회/반환/관리 기능과 함께 스프링의 각종 부가 서비스를 추가로 제공한다.
ApplicationContext는 interface이며 BeanFactory를 상속한다.
.configuration metadata(설정정보/ 설정 메타정보)
application context 혹은 bean factory 가 Ioc를 적용하기 위해 사용하는 메타정보
스프링의 설정정보는 컨테이너에 어떤 기능을 설정하거나 조정하는 경우에 사용되기 하고, 주로 bean을 생성/구성하는 용도로 사용된다.
. container(IoC container)
IoC 방식으로 bean을 관리한다는 의미에서 bean factory나 application context를 가리킨다.
(spring container = application context)
application context는 그 자체로는 ApplicationContext인터페이스를 구현한 오브젝트를 의미한다.
하나의 어플리케이션에서는 보통 여러 개의 ApplicationContext Object가 만들어진다.
이를 통칭해서 spring container라고 부른다.
객체를 관리하는 컨테이너
. spring framework : IoC container, application context를 포함해서 스프링에서 제공하는 모든 기능을 통칭
'기존카테고리 > Spring_basic1' 카테고리의 다른 글
XML 스키마 기반의 AOP 예제1 (0) | 2017.07.11 |
---|---|
빈의 범위(Scope) (0) | 2017.07.10 |
빈의 Life Cycle (0) | 2017.07.10 |
JAVA 속에 XML 코드 삽입 (0) | 2017.07.10 |
XML 속에 JAVA 코드 삽입 (0) | 2017.07.10 |