의존주입에 대해서 학습하면서 정리한 글입니다.
Field Injection
@Autowired
를 통한 자동주입
1 |
|
- 위와 같은 방법은 불필요한 코드없이 간결하게 보이기 때문에 좋아보일 수 있다.
Constructor Injection
1 |
|
- 생성자의 파라미터가 늘어날수록 책임에 대한 위기감이 생기게 된다.
- 의존을 추가할 때마다 생성자에 추가해줘야하기 때문에 번거로울 수 있지만 조심할 수 있다.
- Spring 4.3 버전부터는 단일 생성자일 때
@Autowired
를 쓰지않아도 된다.
왜 Field Injection보다 Constructor Injection인가?
불변성 위반
- Field Injection은 final을 선언할 수 없기 때문에 객체가 변경가능한 상태가 된다.단일 책임의 원칙 위반
- 필드주입은 의존주입이 쉬워져서 책임에 대한 위기감이 덜 느껴지게된다.Field Injection
은 숨은 의존성만 제공한다. -- 필요한 의존성을 가진 클래스를 곧바로 인스턴스화 시킬 수 없다.
- 생성자를 통한 주입은 순환의존성인지를 알 수 있다.
순환의존성?
- 의존하는 것들끼리 꼬리에 꼬리를 물어서
A->B->C->A
와 같은 형태를 말한다.
- 의존하는 것들끼리 꼬리에 꼬리를 물어서