최근 코딩테스트에서 @Component 어노테이션에 대해 설명해보라는 질문이 나왔는데, @Service, @Controller, @Repository에 대해서만 인식하고 있다가 컴포넌트에 대한 질문이 나오자 머리가 하얘졌다.
이걸 객체에 설정하는 건 알고 있었는데, 그래서 정확히 뭐지? 잘 모르고 있었던 듯 했다.
결국 제대로 답변을 적지 못했고 나오는 길에 다시 공부하기로 했다.
@Component는 스프링부트 프로젝트의 특정 class를 기본 Bean으로 등록해주는 어노테이션이다.
즉, 컴포넌트는 스프링 컨테이너에 객체를 등록하는 역할을 한다.
Controller, Service, Repository도 결국 이 컴포넌트이고, 기능(의미)에 따라 분류되어 있는 것이다. -> 특수화된 컴포넌트이다.
@SpringBootApplication 어노테이션은 @ComponentScan을 포함하여, 실행시킬 때 컴포넌트 어노테이션들을 찾아 빈으로 자동 등록하고 생성한다.
-> 그러나 무작정 컴포넌트가 붙어있다고 빈으로 등록되는 것은 아니고, 스프링이 스캔하는 범위 안에 있어야 함.