강의

멘토링

로드맵

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

커디널스님의 프로필 이미지
커디널스

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

21강 생성자에서 의존성 주입과 관련하여 질문 있습니다.

해결된 질문

작성

·

30

0

생성자에서 필드에 의존성 주입하면

예를 들어 컨트롤러 생성자를 만들때 서비스 필드에 의존성 주입해주면 그때는 @Autowired가 자동으로 존재한다고 했는데 이 @Autowired 는 생성자의 파라미터를 전부 빈으로 등록시켜주는건가요?

만약 그렇다고 한다면 생성자의 파라미터가 객체가 아닌 경우는 어떻게 되는건가요?

혹시 객체 타입 파라미터만 빈으로 등록시켜주고 객체가 아닌 파라미터는 빈으로 등록시켜주지 않나요?

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요! 🙂 이렇게 학습을 하시며 다양한 경우를 생각하시는 것 매우 좋은 것 같아요!

우선 하나씩 답변 드려 보면...

예를 들어 컨트롤러 생성자를 만들때 서비스 필드에 의존성 주입해주면 그때는 @Autowired가 자동으로 존재한다고 했는데 이 @Autowired 는 생성자의 파라미터를 전부 빈으로 등록시켜주는건가요?

정확히 말씀드리면 @Autowired빈으로 등록된 파라미터를 주입 해주는 어노테이션입니다!

@Autowired 가 달려 있는 객체가 빈으로 등록되는 기능은 아니에요! 그 기능은 @Component 혹은 @Configuration + @Bean 조합을 사용해야 합니다 (21강을 보셨다면... 곧 등장할거에요!! 😎)

 

만약 그렇다고 한다면 생성자의 파라미터가 객체가 아닌 경우는 어떻게 되는건가요?
혹시 객체 타입 파라미터만 빈으로 등록시켜주고 객체가 아닌 파라미터는 빈으로 등록시켜주지 않나요?

생성자의 파라미터가 객체가 아니라면 해당 타입의 빈을 찾지 못할 것이고, 따라서 빈 주입이 실패하여 스프링 부트가 실행되지 않을거에요!

 

아래 AI 인턴이 얘기해준 스프링 프로퍼티와 관련해서는 @Value 어노테이션 혹은 @ConfigurationProperties 라는 어노테이션을 찾아보셔도 좋을 것 같습니다. 감사합니다 🙇

 

커디널스님의 프로필 이미지
커디널스
질문자

감사합니다

0

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

커디널스님께서 질문하신 내용에 대해 설명드리겠습니다.

생성자에서 의존성 주입을 할 때, 스프링 프레임워크는 생성자의 파라미터로 주어진 객체를 스프링 빈으로 인식하여 자동으로 주입해주는 기능이 있습니다. 이때 @Autowired 어노테이션을 생략할 수 있게 된 것은 Spring 4.3부터의 특징입니다. 그래서 생성자 하나만 존재할 때는 별도로 @Autowired를 명시하지 않아도 됩니다.

이제 파라미터가 객체가 아닌 경우에 대해 설명드리겠습니다. 스프링 빈으로 등록되는 것은 기본적으로 스프링의 컨텍스트에서 관리되는 객체들입니다. 그러므로 생성자의 파라미터가 기본 데이터 타입(예: int, boolean, double 등)일 경우, 이는 일반적으로 스프링 빈으로 등록되지 않습니다. 대신에 이러한 기본 데이터 타입은 스프링에서 프로퍼티를 통해 값이 주입될 수 있습니다.

쉽게 말해, 객체 타입의 파라미터는 자동으로 스프링이 관리하는 빈으로 주입이 되지만, 기본 데이터 타입이나 문자열과 같은 경우는 명시적으로 프로퍼티 설정을 통해 값을 주입하는 방식을 활용하게 됩니다.

관련된 내용을 다룬 질문 및 답변이 있으니, 아래 링크를 참고해 보시기 바랍니다:

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

커디널스님의 프로필 이미지
커디널스

작성한 질문수

질문하기