spring-DI( Dependency Injection ) , IoC (Inversion of Control)

    Spring DI ; Dependency Injection(의존성 주입)

    프로그램에 필요한 각종 클래스들을

    *Bean Container 에 두고 "필요할 때마다 " 불러 와서 사용한다.

     

    예를 들어 특정코드가 있다고 가정하자(연산만 하는 기능),

    또 다른 코드(출력만하는 기능)가 있는데, 

    기능이 둘다 필요한 상황에 이 객체를 연결하고자 한다 :

    기존 객체의 new연산으로 직접 하는것이 아닌 spring(xml)로 연결해준다.

    => 내가 필요한 기능에 의존한다

     

    여기서 *bean = 객체

    jsp에서 useBean 쓸때도 이 bean은 객체를 뜻함

     

    spring 컨테이너에 bean(객체)를 넣고 필요할때 꺼내는 방식 

     

     


    Spring DI Framework 혹은 IoCFramework라고 한다.

     

    IoC ( Inversion of Control ) : 제어역전 
    역순. inversion

    약한결합을 이용하여 객체 간 의존관계를 쉽게 변경할 수 있다.

    스프링 컨테이너가 필요에따라 개발자대신 bean(객체)들을 관리해준다.

     

    강한결합과 약한결합 

    예를들어 핸드폰의 액정이 깨졌을때 액정만 교체하면된다.

    그러나 만약 액정이 폰의 내부에 있는 칩과 함께 붙어있는 구조라면(?)

    액정이 살짝 깨져서 고치려고 해도 폰 자체를 다 검수해야 하는 상황이 생긴다.

    프로그램도 각각의 기능들로 구성되어 있기때문에 이것들이 만약 다른클래스들과 함께 강하게 결합되어 있으면 

    하나의 작은 문제점이 발생했을때 수정하거나 삭제할 때 어려움이 생기게 된다.

    관련이 있는 기능들끼리는 강하게 결합이 되어야 하고 

    관련이 없는 기능들은 약하게 결합되어야 좋은 프로그램이라고 할 수 있다.

     

     


    의존성 주입의 의도는 : 객체의 생성과 사용의 관심을 분리하는 것이다.

    이는 가독성과 코드 재사용을 높혀준다.

     

    의존성주입을 적용했을 때 얻을 수 있는 장점 :

    ① 의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈들간의 결합도 낮출 수 있다 

    코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있다.

    ③ 기존 구현방법은 개발자가 직접 코드안에서 생성과 삭제를 제어했다. 하지만 의존성 주입은 컨테이너가 객체의 생성 소멸과 객체간의 의존관계를 제어한다.

     

     


    의존성 주입방법 3가지 

    1. Field Injection

    의존성을 주입하고 싶은 필드에 @Autowired 어노테이션을 붙여 의존성이 주입

    2. Setter based Injection

    setter에 @Autowired 어노테이션을 붙여 의존성을 주입

    3. Constructor based Injection

    생성자를 사용하여 의존성을 주입

     

     

    반응형

     

    - 해당내용은 위키피디아, 책 (길벗)자바웹을다루는기술에서 참고하여 작성하였습니다.

    'Spring' 카테고리의 다른 글

    스프링 프로젝트 / 쇼핑몰  (0) 2022.01.12
    spring mybatis 설정2  (0) 2021.11.15
    spring mybatis 설정  (0) 2021.11.15
    스프링 MVC  (0) 2021.11.08
    스프링 mvc 프로젝트생성에러  (0) 2021.11.01

    댓글