티스토리 뷰
IoC란 Inversion of Control의 약자로 해석하자면 제어의 역전이다.
즉 제어권이 역전되었다는 뜻인데 제어권이 뒤 바뀌었다는 뜻이다. 이말은 기존의 제어방식을 뒤집었다는 말이 된다.
그렇다면 기존의 방식은 어떠했는가 살펴보자.
자바가 등장하고 자바 기반의 어플리케이션이 개발되던 초기에는 자바 객체를 생성하고 객체간의 의존관계를 연결하는 등의 제어권을 개발자가 직접 가지고 있었다고 한다. 그러나 서블릿, EJB가 등장하면서 개발자가 독점적으로 가지고 있던 제어권이 서블릿과 EJB를 관리하는 외부의 컨테이너로 넘어갔고 객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 IoC, 제어의 역전이라 하는것이다.
Spring (IoC) container
모든 작업을 사용하는 쪽에서 제어하게 되면서 IoC컨테이너에서 제어하게 되는데, 기본적으로 컨테이너는 객체를 생성하고 객체간의 의존성을 이어주는 역할을 한다. 객체의 생성과 소멸을 컨트롤해준다. Spring에서는 ApplicationContext가 이 역할을 해준다.
ApplicationContext 를 역할을 간단히 설명하자면 오브젝트 생성, 관계설정, 만들어지는 방식, 자동생성, 후처리등 여러가지 일들을 한다. 아주 많은 일을 하니 이것은 따로 살펴보도록하자. 또 한 BeanFactory를 상속받고 있다.
그럼 ApplicationContext와 BeanFactory 차이점은 뭘까? 실제 차이점을 검색해보면 대부분 이런글들이 많다. ApplicationContext는 Pre-loading을 하고 즉, 즉시 인스턴스를 만들고 BeanFactory는 lazy-loading을 하여 실제 요청 받는 시점에서 인스턴스를 만든다고 한다. 정리하자면 두 인터페이스의 차이점은 인스턴스화 시점이 다르다는 것이다.
'Spring' 카테고리의 다른 글
Restful API 버전관리 (2) | 2019.10.25 |
---|---|
Spring ApplicationEvent (0) | 2019.10.10 |
HandlerMethodArgumentResolver (0) | 2019.10.02 |
Spring Aop (0) | 2019.04.23 |
스프링에서 @Async로 비동기처리하기 (0) | 2017.04.21 |