Spring에서의 의존관계 자동 주입

hoyong.eom·2023년 7월 1일
0

스프링

목록 보기
2/59
post-thumbnail

Spring

의존 관계 자동 주입

스프링에서는 스프링 빈을 생성하고 스프링 컨테이너에 등록하는 과정과 스프링 의존 관계(연관 관계)를 설정해주는 스텝이 존재한다고 한다.

물론 의존 관계도 스프링에서 자동으로 설정해 줄 수 있었다.

의존관계 자동 주입의 핵심은 @Autowired 라는 어노테이션이다.

의존 관계 자동 주입 방법에는 4가지 방법이 존재했다.

  • 생성자를 이용한 방법
  • Setter를 이용한 방법(내가 호출하지 않아도 스프링컨테이너에 등록된 스프링 빈 객체라면 알아서 setter가 호출되서 의존관계가 주입됨, 스프링 컨테이너에서 관리하고 있지 않는 스프링 빈 객체가 아니라면 그렇지 않음)
  • 일반 메서드를 이용한 방법
  • 필드에 직접 주입 방법

이 포스팅은 목적은 정보 전달의 목적이 아닌 "내가 이건 중요하다!" 라고 생각했던 내용들을 정리하기 위함이기 때문에 어떻게 사용하는지는 정리하지 않는다.

다만, 이중에서 "생성자를 이용한 의존 관계 자동 주입을 사용해야한다" 라는 점을 남겨놓고 싶다.
(누군가의 코드 리뷰 해줄때 언급해주기 위해서...?) 그 이유는 김영한님께서 말씀해주신 것처럼 코드의 유연함을 제공하기 위해서이다. 나는 이 부분에 대해서 매우 공감했는데, 그 이유는 나도 회사 프로젝트를 하면서 테스트할 수 없는 코드를 수 없이 봤기 때문이다. 테스트를 하기 위해서는 빌드해서 실제 테스트 환경에서 올려놔야했고... 매우 많은 BugFix 과정을 거치면서 개발을 진행했었다.
이런 시간들을 보내고 나니 테스트를 할 수 있도록 코드를 만드는게 얼마나 스스로에게도 중요한지 공감할 수 있었다.

결론

서론이 길었는데, 결론은 다음과 같다.

일반적으로는 생성자를 이용한 방법으로 의존관계주입을 사용한다. 그러나, 중간에 변경이 필요한 경우 Setter를 이용한 방법도 고려한다.

그 이유는 필드에 직접 주입하는 방법은 의존 관계를 변경하기 위해서 스프링 프레임워크가 반드시 필요하기 때문이고, 순수자바코드 테스트가 불가능하다. 또 일반 메서드를 이용한 방법은 Setter를 이용한 방법과 다를바가 없다. 추가로 Setter를 이용한 방법도 내 생각엔 별로 좋지 않다.
왜냐하면 모듈을 개발한 사람을 코드의 전반적인 내용을 알고 있지만, 그 개발자가 평생 유지보수 할게 아니기 때문에.. Setter가 누가 언제 어디서 호출해서 의존관계가 변경될지 알 수 없다.

물론 Autowired가 작동하기 위해서는 무조건 스프링 컨테이너에 등록된 스프링 빈 객체이어야 한다.

참고

해당 포스팅은 아래의 강의를 공부 후 개인적으로 정리한 내용입니다.
김영한님의 스프링 기본편

0개의 댓글