프로그래밍/Spring

IOC(제어의 역전)

Jay22 2017. 1. 2. 11:15
반응형

스프링 프레임워크는 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다


IOC (Inversion of Control)


즉 개발자가 할 일을 프레임워크에서 대신한다는 뜻이다


1. IOC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.

2. POJO(Plain Old Java Object)의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.

3. 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.



DL : 의존성 검색 => 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 look up 한다

DI : 의존성 주입 => 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결 해 주는 것

setter injection, constructor injection, method injection으로 의존관계를 정리한다.



DI상세 설명

Bean Definition 정보를 바탕으로 컨테이너가 자동으로 연결한다

개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 주가하면 된다. (xml 이나 annotation으로)

객체 레퍼런스를 컨테이너로 부터 주입받아서 실행시에 동적으로 의존관계가 생성된다


장점 : 1. 코드가 단순해진다 

        2. 컴포넌트 간의 결합도가 제거된다


ex)  A 클래스내에  B 클래스를 생성하는 코드가 있는데

그 안에서 new B(); 로 직접 생성하는 것이 아닌 A와 B가 의존관계가 있다 라는 것만 설정해놓으면 컨테이너가 알아서 해준다.


setter injection : setter 메서드를 통해 의존성을 주입


contructor injection : 생성자를 이용한 의존성 삽입


method injection : 메소드를 이용한 의존성 삽입








왼쪽 상단 클래스는 인터페이스만 가져다 쓰고 설정파일에 (xml)에 구현클래스를 쓴다고 구현해 놓는다.


오른쪽 그림처럼 beans.xml 에 설정을 해 놓는다. 컨테이너가 beans.xml 을 읽어서 의존관계 주입을 런타임에 동적으로 해준다.





Setter Injection






오른쪽 자바 파일에서는 new Printer(); 라는 직접적인 객체 생성 코드가 존재하지 않는다.

bean (스프링이 관리해주는 자바 객체)






Constructor Injection




한번에 여러개의 인자를 생성자에 받을 수 있다





Spring DI 컨테이너

Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리라고 한다.














반응형

'프로그래밍 > Spring' 카테고리의 다른 글

[SpringOneTour] 스프링을 만든 Pivotal사가 한국을 방문했다!  (0) 2018.11.08
[IntelliJ] 스프링 프로젝트 초기 세팅하기 - (1)  (3) 2017.04.30
Spring MVC  (0) 2017.01.03
AOP  (0) 2017.01.02
Spring JDBC & JdbcTemplate  (0) 2017.01.02