제어의 역전 (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

+ Recent posts