• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

21:40 필드주입 과정

24.01.18 10:24 작성 조회수 176

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
21:40 쯤 테스트 과정에서 필드 주입으로 인해 null이 뜬다 하셨는데 이해가 안갑니다.

  1. 필드 주입으로 인해 처음 객체가 생성될 시 의존성 주입으로 생성됨

  2. 그로 인해 외부에서 다시 DI 를 하면 변경이 안됨

  3. DI 가 되질 않아서 NULL 이 떴다?

라고 이해하면 되는건가요?

답변 1

답변을 작성해보세요.

2

y2gcoder님의 프로필

y2gcoder

2024.01.18

안녕하세요. 규원님, 공식 서포터즈 y2gcoder입니다.

해당 테스트를 돌리는 OrderServiceTest는 @SpringBootTest가 붙지 않았습니다. 이 말은 해당 테스트를 돌릴 때 스프링 컨테이너가 의존성 주입을 해주지 않는다는 뜻입니다. 그래서 이 경우에는 의존 객체 주입을 직접 해주셔야 합니다. 그러나 필드 주입 방법을 사용하면 의존 관계 주입을 수동으로 해줄 방법이 없습니다. 그래서 memberRepository, discountPolicy 인스턴스 모두 null인 상태로 OrderServiceImpl 인스턴스가 만들어지고, null인 memberRepository, discountPolicy 인스턴스에 접근하려고 하니 에러가 발생하고 있는 것입니다 :)

감사합니다.