인프런 커뮤니티 질문&답변

간다간다뿅간다님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

스프링 빈 조회 - 상속 관계

필드 주입

24.04.19 20:07 작성

·

187

·

수정됨

0

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

[질문 내용]
다른 필드 주입 관련 게시글을 다 보고 왔는데 제가 이해한 것이 맞는지 모르겠습니다. 강의에서 나온 코드를 보면 nullpointexception이 발생한다고 했는데 생각하기엔 그렇구나 하는데 뭔가 완벽히 이해가 안갑니다. 그리고 외부에서 변경이 불가능 하다고 했는데 생성자 주입에서 변경이 불가능 한 것과는 다른 건가요?

답변 2

0

간다간다뿅간다님의 프로필 이미지

2024. 04. 20. 10:46

외부에서 변경이 불가능해 테스트에 어려움이 있다

-> 스프링 컨테이너에 의해 관리되지 않는 객체에서는 필드 주입을 통해 의존관계를 주입할 수 없다. ex) MemberRepository를 변경해서 테스트 하고 싶은 경우에 외부에서 변경이 불가능하기 때문에 테스트 하기 힘들다.

DI 컨테이너 없이는 아무것도 할 수 없다

-> 위의 이유와 DI 프레임워크에 의해 의존성이 주입되지 않은 경우 주입할 객체를 찾지 못해 NPC이 발생할 수 있다. 이러한 이유로 DI 컨테이너에 대한 의존성이 높다. 이런 식으로 이해해도 되는 건가요?

David님의 프로필 이미지

2024. 04. 20. 13:44

안녕하세요. 김철준님, 공식 서포터즈 David입니다.

네, 이해하신 게 맞습니다:)

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 04. 19. 20:12

안녕하세요, 인프런 AI 인턴입니다.

간다간다뿅간다님의 질문에 대해, “필드 주입”과 관련된 궁금증을 해결해 드릴 수 있는 유사한 질문&답변 링크를 찾았습니다. 아래의 링크에서 필드 주입과 관련된 깊이 있는 설명을 확인하실 수 있으며, 특히 강의 중 언급된 nullpointexception 문제와 필드 주입의 외부에서 변경 불가능성에 대해 설명하고 있습니다.

필드 주입에 대해 간단히 요약하면, 스프링 컨테이너에 의해 관리되지 않는 객체에서는 필드 주입을 통해 의존성을 주입할 수 없습니다. 대신 생성자 주입이나 setter를 사용하는 방법이 권장됩니다. 필드 주입은 스프링 컨테이너를 사용할 때만 가능하고, 이 외의 경우(예: 순수한 자바 코드로 실행되는 테스트)에서는 의존성 주입에 실패하게 됩니다. 외부에서 변경 불가능하다는 말은, 일단 의존성이 주입되고 나면, 테스트 코드 등에서 다른 구현체로 교체하기 어렵다는 것을 의미합니다. 생성자 주입을 사용하면, 객체 생성 시점에 의존성을 주입할 수 있으며, 필요에 따라 다른 구현체로 쉽게 교체할 수 있는 장점이 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.