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

JaeHongMin님의 프로필 이미지

작성한 질문수

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

18강. Controller를 3단 분리하기 - Service와 Repository

어노테이션에 대해서

작성

·

399

3

 안녕하세요 강의 잘 듣고 있습니다!!

강의를 듣다가 궁금해서 질문 남깁니다.

Controller와 Service 연결할때와 Service와 Repository를 연결할때 사용하는 @Autowired는 사용하지 않아도 자동으로 연결이 되는건가요??

Service클래스와 Repository클래스 위에 @Service, @Repository 어노테이션을 사용할떄도 있고 이번 강의처럼 사용하지 않을떄도 있는데 아직까지 차이점을 모르겠습니다.

답변 2

4

@Controller, @Service, @Repository 모두 코드를 들여다 보면 @Component 애노테이션이 붙어있을 겁니다. @Component 애노테이션은 컴포넌트 스캔의 대상이 되어 '스프링 빈'으로 등록이 되어 '스프링 컨테이너'가 관리하게 됩니다. 그래서 @Service, @Repository 애노테이션을 사용했을 때와 사용하지 않았을 때의 차이는 스프링 빈으로 등록 및 관리가 되냐 안 되냐의 차이가 있습니다.

또한 @Autowired는 이름에서 알 수 있듯이, 자동으로 연결해 주는 것입니다. (자동 의존관계 주입) 만약 생성자를 통해 주입을 받는 경우, 생성자가 하나라면 @Autowired는 생략이 가능합니다. (스프링 빈으로 등록되었을 때에 해당됩니다^^)

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

완벽한 설명이십니다~~~ 감사합니다! 찬우님!! 😊 🙇

1

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

안녕하세요 JaeHongMin님!! 좋은 질문 감사드립니다!! 😊

찬우님께서 정말 잘 설명해주신 것처럼, 똑같은 Service 클래스 / 똑같은 Repository 클래스이지만,

@Service 혹은 @Repository 어노테이션을 사용하게 되면 '스프링 빈'이 되고

저희가 직접 new Service() 라는 생성자를 불러주면, '스프링 빈'이 아닌 것이에요!!!!!

 

@Autowired 라는 어노테이션 자체는 '스프링 빈'에만 적용할 수 있고 18강은 저희가 직접 생성자를 호출하였기 때문에 (즉 스프링 빈이 아니기 때문에) @Autowired 를 사용하지 않은 것입니다!

 

지금 듣고 계신 18강을 넘어, 19강부터 21강까지 들어보시면 (특히 19강에서 new Repository()@Repository 의 차이점을 코드로 보실 수 있습니다!) 조금 더 감이 오실겁니다!!

 

혹시나 <Section 3. 역하릐 분리와 스프링 컨테이너>를 모두 들으셨는데도 아직 차이점 잘 정리되지 않으신다면, 한 번더 편하게 질문 올려주세요!!!

감사합니다!!! 🙏