이번에 DI를 사용해 간단한 코드를 작성해 보면서 DI에 대해 제대로 이해하지 못한것 같아 공부할겸 작성해보기로 했다
DI란?
DI(Dependency injection)으로 의존성 주입 혹은 의존 관계 주입이라고 불린다. Spring은 3가지 핵심 프로그래밍 모델(AOP,DI,IoC)를 지원하는데 그 중 하나가 DI이다. Spring은 객체의 의존관계를 DI를 통해서 관리하는데 DI는 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜 주는 방식이라고 할 수있다. 이를 통해서 객체 간의 관계를 동적으로 주입해서 유연성을 가질 수 있다.
Constructor Injection(생성자 주입)
주입 방식에는 3가지가 있지만 현재 가장 권장되는 방법은 생성자 주입이기 때문에 이것만 다루도록한다.
- 현재 가장 권장되는 방식
- 하나의 생성자가 존재할 떄 필드 주입의 대부분의 단점을 극복한다.
- spring 4.3에서는 @Autowired가 생략 가능해서 최근에는 생성자를 한개만 두고,@Autowired를 생략하는 방식을 사용한다.
- 오직 생성자 주입만이 final키워드를 사용할 수 있고, 생성자를 통해 주입되는 방식이다.
-> final키워드를 쓰는 이유는 불변성의 보장때문이다.- 생성자 주입을 이용할 때 롬복의 @RequiredArgsConstructor 어노테이션을 이용하면 final키워드가 붙은 주입에 생성자를 만들어 준다.final을 쓰지 않으면 @AllArgsConstrunctor
를 이용하면 된다.