[Spring] 생성자 주입 vs 필드 주입(@Autowired)

푸른별·2023년 7월 4일
0

Web

목록 보기
7/16
post-thumbnail

그동안 프로젝트 및 테스트를 진행하며 @Autowired 하나만 써도 정말 편하게 사용할 수 있던지라 신경쓰지 않고 사용했는데, 어느 순간부터 필드 주입을 권장하지 않는다는 구문이 뜬다는 것이었습니다.


  1. 필드 주입(setter 주입도)은 객체 생성시점에 순환 참조가 일어나는지 여부를 확인할 수 없습니다.

ex) new ServiceImpl(new BoardServiceImpl(new ServiceImpl(...)))

컨테이너가 빈을 생성하는 시점에서 객체 생성 중 사이클이 발생되는 문제가 발생하면 실제 코드 동작 중 문제가 발생할 수 밖에 없습니다.

  1. 편리하지만, 외부에서 수정이 어려운 이유로 테스트 코드 작성 시 객체를 수정할 수 없습니다.

테스트 코드를 작성할 때 객체를 수정해서 원하는 결과를 도출해야 하는데, 이를 테스트할 수 없다면 실제 코드가 어떻게 동작하는지 미리 확인하기 어려운 점이 있습니다.
(다만 Board board = new board(); 같이 주입 관련 어노테이션 없이 하면 임시방편 정도는 될 수도..? 있겠네요)

등등 여러 이유가 있지만 우선 다음의 두 이유와 권장하지 않는다는데 굳이 쓸 이유도 없겠다, 해당 코드 및 위와 같은 방식으로 Autowired 어노테이션을 가지는 코드를 다음과 같이 수정하였습니다.

  • 이후에 여러 프로젝트를 진행하며 어떤 점이 유리한지 및 차이점 등에 대해 알게 되는 내용이 생기면 추가로 작성할 예정입니다.
profile
묵묵히 꾸준하게

0개의 댓글