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 |
댓글