• SPRING_Spring DI/IoC 개념 및 정의

    2021. 9. 15.

    by. KAEY


    IoC / DI

    Spring DI/IoC

    JAVA 의 Class 상속 / Interface 를 이용한 추상화를 기반으로 하는 개발 방법.

    Spring은 DI/IoC 를 강력하게 지원하는 프레임워크.

     

     

    IoC (Inversion of Control) : 제어권의 역전

    객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미

    객체의 생성을 책임지고, 의존성을 관리

    POJO의 생성, 초기화, 서비스, 소멸에 대한 권한 가짐

    프로그램을 제어하는 패턴 중 하나이고, DI는 IoC패턴의 구현체 중 하나

     

     

    DI(Dependency Injection) : 의존성 주입

    각 클래스 간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

    프로그램에 필요한 각종 클래스들을 Bean Container 에 두고 필요할 때마다 그때 그때 불러와서 사용함. 

     

     

    스프링은 DI를 기준으로 많은 프레임워크 모듈 들이 만들어짐.

     

     


    DI (Dependency Injection) : 의존성 주입

    Spring 은 코드가 직접 다른 객체를 호출하지 않도록 권고한다. 

    XML 을 사용해 Spring이 객체를 직접 생성하도록 한다. 이렇게 생성된 객체는 “Bean”이라고 부른다. 

      ㅡSpring Bean은 싱글톤 객체로 생성된다.

    Spring이 생성한 객체는 “Bean Container” 라는 저장소에 저장된다. 

    Spring은 의존관계(생성 및 사용의 관계)를 직접 관리한다.

    필요한 객체(Bean)는 스프링에게 요청하여 받아낸다. 

     

     

     

    즉, 개발자는 객체의 생성을 직접 할 필요가 없다. 

      ㅡ개발자들은 단지 빈 설정파일에서 의존관계가 필요하단 정보를 추가하면 됨

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

      ㅡ컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것.

     

     

    장점

    코드가 단순해짐

    컴포넌트 간의 결합도가 제거됨

     

     


    Spring DI

    DI (Dependency Injection)의 유형

    Setter Injection : Setter 메소드를 이용한 의존성 삽입

    →의존성을 입력 받는 setter 메서드를 만들고 이를 통해 의존성을 주입

     

    Constructor Injection : 생성자를 이용한 의존성 삽입

    →필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입 

     

    Method Injection : 일반 메소드를 이용한 의존성 삽입

    →의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입

     

     

     

    DI 용어

    빈(Bean) : 스프링이 IoC 방식으로 관리하는 객체

    →스프링이 직접 생성과 제어를 담당하는 객체를 Bean이라고 부름

     

    빈 팩토리(Bean Factory) : 스프링의 IoC를 담당하는 핵심 컨테이너

    →Bean을 등록, 생성, 조회, 반환하는 기능을 담당 

    →이 BeanFactory를 바로 사용하지 않고 이를 확장한 ApplicationContext를 주로 이용

     

    애플리케이션 컨텍스트(Application Context) : BeanFactory를 확장한 IoC 컨테이너 

    → Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공 

    → 스프링에서는 ApplicationContext를 BeanFactory 보다 더 많이 사용함 

     

    설정 메타정보(Configuration metadata) : ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 메타정보 

    → 설정 메타정보는 IoC컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 사용

     


    댓글 (비로그인 댓글 허용하지 않습니다.)