[Spring] Field-Injection , Autowired 에 대해

BoongDev·2021년 7월 24일
0

Spring

목록 보기
2/3

https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/
정말 쉽게 잘 설명이 되어있습니다. 감사합니다.

18년도에 발행된 책으로 공부중입니다.
Autowired 관련 내용이 나오는데 책에서는 Autowired에 대해서 별 말 없이 사용중이지만 3년의 시간이 지난 지금은 Autowired가 편하기만 한 기능이라는 평가를 받고 있고 18년도에 들었던 강의에서도 Autowired가 빠지는 추세라는 것이 기억이나 자료를 찾아보았습니다.

DI (의존 주입)의 방식은 크게 2가지

  • 생성자 주입 방식
  • 세터 메소드 주입 방식

가 있습니다. 그리고 Spring 에서 제공하는 방식인

  • Field-Injection = @Autowired 방식이 있습니다.

Field-Injection을 왜 추천하지 않는가?

  • Immutable 할 수 없음 = NullPointerException 이 뜰 수 있음
  • 인스턴스화 불가
  • 하나의 클래스가 많은 책임을 떠안을 수 있음 (강한 결합도)
    -> 결국 리팩토링해야하는 징조가 될 수 있음
  • 순환 참조 = 똑같은 경우는 아니지만 무한 루프와 유사한 현상이다.
    -> ex) first class가 second class를 참조하고 second class가 first class 를 참조한다면 서로가 서로를 계속해서 참조하다 Stack Over Flow 에러 가 뜬다.
    그리고 실제 코드를 호출 하기 전까지 알지 못한다는게 크다...

Setter Injection

주입이 필요한 객체가 주입이 되지 않아도 얼마든지 객체를 생성할 수 있다는 것이 문제다. 굳이 사용할 이유가 없다.

  • Immutable X
    => NullPointerException 이 뜰 수 있다.

Constructor Injection 사용권장

  • final 선언 가능하기 때문에 Immutable 함
  • 단위 테스트 코드 작성 유리
  • 순환참조 탐지가 가능함
  • 의존 관계가 설정되지 않으면 객체생성 불가
profile
욕심 많은 주니어 개발자입니다.

0개의 댓글