본문 바로가기

웹/spring

Spring2 -- 의존성(dependecy)과 의존성 주입 (DI)

A>DI ,IOC

자바에선 객체들끼리 의존성을 가지고 있는 경우가 있다.

의존성의 가장 좋은 예는 new 생성자이다.

new 생성자가 없으면 동작하지 않는 경우이다.

B가 바뀌면  A도 바뀌어야 한다는 단점도 있다.

즉, 유지보수는 힘들어진다.

 

스프링은

객체들이 존재하는 컨테이너를 가지고 있고 

예를 들어

A 객체가 B 객체를 필요로 할 때

객체들이 있는 컨테이너에서 B 객체를 생성해서 

A에게 주입을 해주는 것이다.

 

그러면 의존성을 최소화 할 수 있다.

B가 바뀌어도 상관이 없다. 

어짜피 바뀐 객체도 컨테이너에 있다.

A는 무언가 수정할 필요가 없다.

 

객체 생성에 있어서 주도권을 사용자가 

가지는 것이 아니고 컨테이너가 가지고 있기 때문에

Inversion Of Control

이라는 개념으로 사용된다.

 

DI 는 컴파일시가 아닌 실행시 의존관계가 완성된다.

의존하는 객체를 바이너리 형태로 컨테이너에 저장해 두고 

실행시에 주입을 하기 때문이다.

 

또 의존성을 최소화 하기 위한 방법은 메소드를 

인터페이스로 정의하는 것이다.

그러면 메소드가 바뀌어야 할 때에도 

A는 수정할 필요가 거의 없다.

구현한 인터페이스를 손보면 된다. 

 

B>root-context

컨테이너에 담을 객체 정보는

root-context 에서 등록한다.

 

C> 주입

주입은 @Autowired와 같은 어노테이션으로도 가능하다.

lombok의 @Setter(onMethod_ =)  로도 할 수 있다.

 

생성자 메소드로 만든 객체를 주입하고 싶으면

@RequiredArgsConstructor 를 사용하면 된다.

이 어노테이션은 초기화 되지않은 final 필드나, 

@NonNull 이 붙은 필드에 대해 생성자를 생성한다.

 

 

 

스프링 4.3 버전 이후에는

단일 파라미터를 이용하는 생성자에 한해서 특정 타입의 객체를 

자동으로 주입해준다.

' > spring' 카테고리의 다른 글

spring --8.MVC  (0) 2021.02.19
spring --7. 로그  (0) 2021.02.19
spring --5 . 테스트  (0) 2021.02.19
Spring 3 -- AOP  (0) 2021.02.18
Spring framework 1 -- 간단한 설정 정보  (0) 2021.02.18