본문 바로가기

Java/spring

Spring Framework와 [IOC / DL / DI] 정의

1.  Spring Framework?

    • 부품을 조립해주는 라이브러리(lib)로 라이브러리가 모이면 framework(재사용하는 틀)이 된다.
    • 요구명세서(목록)만 주면 객체도 생성하고 조립까지 해준다.
    • 생성 순서는 Big -> Small 의 형식이 아닌 Small -> Big 의 순서대로 간다.

          (ex) 로봇을 생성할 때 손가락 -> 손 -> 팔뚝 -> 팔 -> 몸통 -> 전체의 형식


위와 같이 Core 부분의 IoC Container가 Spring의 핵심이고, IoC에는 DI가 있으며 이것을 좀더 세부적으로 나눈다면 Setter Injection, Constructor Injection, Method Injection 등으로 나눌 수 있다.


2. Spring Framework의 장점


- 경량 컨테이너

    • 전체 스프링의 크기는 1MB 남짓 한 하나의 JAR파일 및 스프링에 의해 발생하는 부하는 무시해도 되는 수준
    • 객체의 라이프 사이클 관리, JAVA EE 구현을 위한 다양한 API 제공

- DI(Dependency Injection), AOP(AspectOriented Programming),

   POJO(Plain Old Java Object) 지원

- 다양한 API와의 연동 지원을 통한 JAVA EE 구현 가능


3. Spring Framework의 주요 특징


- DI(의존성 주입) / AOP(관점지향) / MVC(JDBC 코딩)

- 통합(struts, spring, mybatis, hibernate)

- Transation / IOC(제어의 역행, 역제어)

 

4. IOC(Inversion of control)?


자바가 등장하고 자바 기반으로 애플리케이션을 개발하기 시작하던 최초의 시기에는 자바 객체를 생성하고 객체간의 의존관계를 연결시키는 등의 제어권을 개발자가 직접 가지고 있었다. 그러나 서블릿, EJB가 등장하면서 개발자들의 독점적으로 가지고 있던 제어권이 서블릿과 EJB를 관리하는 컨테이너에게 넘어가 버렸다. 객체에 대한 제어권이 컨테이너에게 넘어가면서 객체의 생명주기를 관리하는 권한 또한 컨테이너들이 전담할 수 밖에 없게 되었다. 이처럼 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐것을 의미하는 것이 제어권의 역전, 즉 IoC라는 개념이다.


5. DL(Dependency Lookup)이란?


모든 IoC 컨테이너는 각 컨테이너에서 관리해야 하는 객체들을 관리하기 위한 별도의 저장소를 가진 다. Bean에 접근하기 위하여 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 Bean을 Lookup 하는 것으로 컨테이너 API와 의존관계를 많이 가지면 가질수록 어플리케이션에 종속되는 단점이 있다.


6. DI(Dependency Injection)이란?


DI는 Spring에서 새롭게 지원하는 IoC의 한 형태로써 각 계층 사이, 각 Class 사이에 필요로 하는 의존관계가 있다면 이를 컨테이너가 자동적으로 연결시켜 주는 것으로 각 Class 사이의 의존관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것이다.


    • Setter Injection : Class 사이의 의존관계를 연결시키기 위해 Setter 메소드를 이용하는 방법.
    • Constructor Injection Class 사이의 의존관계를 연결시키기 위해 생성자를 이용하는 방법.
    • Method InjectionMethod Injection은 Setter Injection과 Constructor Injection이 가지고 있는 한계점을 극복하기 위하여 지원하고 있는 DI의 한 종류다. Singleton 인스턴스와 Non Singleton 인스턴스의 의존관계를 연결할 필요가 있을 때 사용한다.