제어의 역전 (IOC) Inversion Of Control
오브젝트 팩토리
< 팩토리란 >
- 객체의 생성방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것
이런 일을 하는 오브젝트를 흔히 팩토리라 한다.
- 오브젝트를 생성하는 쪽과 , 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 깔끔하게 분리하려는 목적
< 제어의 역전 >
- 프로그램의 제어 흐름 구조가 뒤바뀌는 것
- 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않고 생성하지도 않는다.
- 모든 제어권한을 다른 대상에게 위임
- 모든 오브젝트는 이렇게 위임받은 제어 권한을 갖는 특별한 오브젝트에 의해 결정된다.
< 라이브러리와 프레임워크의 차이 >
- 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
- 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식
- 애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 한다.
< 스프링의 IoC >
1. 빈 : 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
2. 스프링 빈 : 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트
3. 빈 팩토리 : 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트
4. 애플리케이션 컨텍스트 : IoC 방식을 따라 만들어진 일종의 빈 팩토리 (빈 팩토리보다 이를 더 확장한 개념 )
- 빈팩토리와 애플리케이션 컨텍스트는 동일하다고 생각하면 된다.
- 빈팩토리 : 빈을 생성하고 관계를 성정하는 IoC의 기본 기능에 초점을 맞춘 것
- 애플리케이션 컨텍스트 : 애플리케이션 전반에 걸쳐 모든 구성요서의 제어 작업을 담당하는 IoC엔진 이라는 의미가 좀 더 부각
@Configuration : 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식 할수 있도록 하는 어노테이션 (ex DaoFactory )
@Bean : 오브젝트를 생성하고 초기화해서 돌려주는 어노테이션 ( ex userDao() )
애플리케이션 컨텍스트를 사용했을 때 장점
- 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다
- 애플리케이션 컨텍스트는 종합 IoC서비스를 제공해준다.
- 애플리케이션 컨텍스트는 빈을 검색하는 다양한 방법을 제공한다.
< 스프링 IoC의 용어정리 >
빈 bean
- 빈 , 빈 오브젝트는 스프링이 IoC 방식으로 관리하는 오브젝트 라는 뜻 (관리되는 오브젝트라고 부르기도 함 )
- 스프링이 직접 그 생성과 제어를 담당하는 오브젝트 만이 빈이라고 부른다.
빈 팩토리 bean factory
- 스프링의 IoC를 담당하는 핵심 컨테이너
- 빈을 등록, 생성, 조회하고 돌려주고, 그 외에 부가적인 빈을 관리하는 기능을 담당
- 보통은 빈 팩토리를 바로 사용하지 않고 이를 확장한 애플리케이션 컨텍스트를 이용한다.
애플리케이션 컨텍스트 application context
- 빈 팩토리를 확장한 IoC 컨테이너
- 빈을 등록하고 관리하는 기본적인 기능은 빈 팩토리와 동일
- 여기에 스프링이 제공하는 각종 부가 서비스를 추가로 제공한 것
설정정보/ 설정 메타정보 configuration metadata
- 스프링의 설정정보란 애플리케이션 컨텍스트 또는 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보
'책 > 토비 스프링 2020' 카테고리의 다른 글
[2017] 5. 서비스추상화 (0) | 2017.12.29 |
---|---|
[2017] 스프링개념 (0) | 2017.12.28 |
[2017] 4. 예외 (0) | 2017.12.21 |
[2017] 3. 템플릿 (0) | 2017.12.15 |
[2017] 1. 오브젝트와 의존관계 (1) (0) | 2017.11.29 |