본문 바로가기

개발

Field Injection vs Constructor Injection With Java Spring's @Autowired

Field Injection은 제일 간단해 보이지만 나쁜 스타일이라고 함. 

클래스들끼리 커플링이 높아지고 유닛 테스팅이 힘들어짐. 

필드주입을 하면 유닛 테스트시 spring 설정 파일을 읽어서 모든 bean 설정이 끝나야지만 테스트가 시작됨

다른 테스트나 다른 모듈에서 재 사용 할수 없음. 

 

Constructor Injection은 올바른 의존관계를 설정하지 않으면 컴파일 에러가 나므로 위험요소를 미리 없앨수 있음. 

테스트 할때도 모든 bean 설정을 하지 않고 필요한 bean 설정만 하면 할 수 있기 때문에 더 빠르게 테스트를

할 수 있음. 

 

생성자에서 의존관꼐가 5개 이상 되어서 지저분해 보이면 단일 책임 원칙을 어긴것이기라고 생각할수 있고

코드 리펙토링이 필요한 시기.

immutable object로 만듬. 

 

setter injetcion은 선택적인 의존성 관리 때 사용한다. class 는 setter에 의한 의존성이 주입되지 않아도 동작 해야함. 

Another advantage is that if using spring 4.3+, you can completely decouple your class from DI frameworks.

 

di 를 이용한다는것은 자신의 의존성에 더이상 책임을 지지 않아도 된다는 의미임. 

Constructors are more suitable for mandatory dependencies and when aiming for immutability. Setters are better for optional dependencies.

 

 

 

반응형