본문 바로가기
Web/Spring Boot

[DI] 생성자 주입을 사용하자

by foreverever 2022. 6. 21.
반응형

DI 방식 종류는

 

1) 생성자 주입

2) setter 주입

3) 필드 주입

4) 일반 메서드 주입

 

위 4가지 중 1)생성자 주입으로 사용하자

 

왜?

 

1) final 키워드 작성 가능 == 불변

대부분 의존관계 주입은 한번 일어나고 애플리케이 종료시점까지 변경되면 안된다.

setter와 메서드방식의 경우 public으로 지정하다보니 외부에서 실수로 개발자가 변경할 수 있는 위험요소가 있음

 

2) 의존관계 누락 방지

생성자는 인스턴스를 만들때, 당연히 위와 같이 컴파일 에러를 뱉음

(컴파일 오류는 세상에서 가장 빠르고 좋은 오류다)

 

그러나, setter 주입일 경우는?

현재 MemberService에서 Repository가 누락되었으나,

문제없이 생성자를 통해 인스턴스를 만들고, 주입받지 못한 memberSerivce의 메서드를 호출했을 때,

NPE 발생

 

3) 테스트 코드 작성 용이

이미 위의 예제들 처럼 테스트 코드를 작성하기 편함

필드 주입의 경우는 private이며, 테스트 코드 작성이 불편함

 

결론은 생성자 주입 사용하자

반응형

'Web > Spring Boot' 카테고리의 다른 글

[Mockito] spyBean vs mockBean  (0) 2022.07.10
@EventListener & @PostConstruct  (0) 2022.06.09
[Spring] @RestControllerAdvice  (0) 2019.07.16
[Spring] AOP  (0) 2019.06.26
[Spring] DI (Dependency Injection)  (0) 2019.06.24