-
의존성 주입할때 생성자 생성을 통해 해야하는 이유프로그래밍/Spring 스프링 2022. 7. 26.반응형
의존성을 주입 할 때 보통 @Autowired를 사용해서 의존성을 주입 했었는데.
솔직히 이렇게 주입하는게 편하다. 괜히 auto가 아님.
간단한 코드이거나 프로젝트의 구성이 복잡하기 않을 경우, 개인 테스트용 프로젝트 에는 크게 상관이 없지만
실무에서 사용할때는 어노테이션을 사용해서 의존성을 주입 하는 것 보다는 생성자를 만들어서 의존성을 주입 하는게 좋다. (물론 실무라고 어노테이션을 사용하면 안좋다는 뜻은 아님.)
어노테이션을 사용한 의존성 주입
@Component public class MadExample { @Autowired private HelloService helloService; }
보통 MVC 구성의 프로젝트에서 Service단을 Controller에서 사용하기 위해서 이러한 구성의 코드 작성을 하게 된다.
단순하게 @Autowired 하나만 붙여주면 자동으로 의존성이 붙기 때문이다.
생성자를 통한 의존성 주입
@Controller public class MemberController { private final MemberService memberService; // 단일 생성자인 경우에는 어노테이션 안붙여도 됨. public MemberController(MemberService memberService) { this.memberService = memberService; } }
생성자 생성을 통한 의존성 주입 방법은 스프링 팀에서도 권장하는 방식이라고 한다.
어노테이션 @Autowired를 사용하는 방식보다 이 방식을 사용해야하는 이유는
1. 순환 참조를 방지할 수 있다.
2. 테스트 코드 작성이 편리하다.
3. 코드의 질이 더 좋아진다.
4. 실행 중 객체가 변하는 것을 막을 수 있다.
5. 오류를 사전에 방지가 가능하다.
로 요약할 수 있다.
먼저 순환 참조가 발생하면 코드에는 에러가 없다고 나오지만 애플리케이션 구동이 안된다.
그리고 필드에 final을 사용할 수 있어서 객체가 변하는 것을 막을 수 있다.
정리하자면 그냥 웬만하면 생성자 생성을 통해 DI(의존성 주입)를 하는게 좋다.
참고한 블로그
https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection
반응형'프로그래밍 > Spring 스프링' 카테고리의 다른 글
Spring - Maven build 옵션들 (0) 2022.07.05 SpringBoot - jsp 파일 서버 재시작 없이 갱신 (0) 2022.06.22 Spring - consumes, produces 주고 받는 데이터 제한하기 (0) 2022.06.20 Swagger - API 문서 꾸미기 (0) 2022.06.16 스프링 - Git과 로컬 비교 Synchronize Workspace (0) 2022.06.12