본문 바로가기

Spring_SpringBoot/이론

애노테이션(Annotation) - Component, Bean

애노테이션(annotation)은 사전적 의미로는 주석을 의미한다. 

일반적인 주석과 다르게 애노테이션은 코드를 작성할 수 있다.

 

즉, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애노테이션이다.

 

애노테이션은 주석이기 때문에 다이나믹하게 실행되는 코드는 들어가지 않는다.

즉, 런타임 중에 알아내야하는 값은 못들어간다.

Annotation을 통해 @Autowired를 통해서 의존성을 찾지 못한다는 에러를 많이 봤을 것이다.

    런타임 도중에 해석할 수 없으므로 코드가 실행되기 전에 에러를 내버리는 것이다.

 

Annotation은 의미가 있는 것도 없는 것도 있다.

예를 들어 Overriding같은 경우는 특별한 기능은 없다. 그러나 개발자의 편의상 제공하는 어노테이션이다.

그러나 @Bean, @Component, @Service와 같은 어노테이션은 개발자에게 코딩 수준에서 편의를 제공하는

어노테이션이다.

 

여기서 나는 자주 쓰는 @Component와 @Bean에 대해 말할 것이다.

둘 다 객체를 만들어서 Bean으로 등록해서 스프링 컨테이너에 등록하겠다는 의미이다.

 

다음과 같은 얘기를 많이 들어봤다.

@Bean은 직접 개발자가 객체를 등록할 수 없는 외부 라이브러리를 주로  스프링 컨테이너에 등록하기 위해서

사용하고 @Component는 이미 개발자가 스프링 컨테이너에 객체를 등록하기 위해 사용한다.

→ 외우려고 하지 말고 이유를 곰곰히 생각해보니까 왜 @ Bean은 왜 Configuration까지 쓰는지 알았다.

 

Bean은 메소드 레벨이고, Component는 클래스 레벨이다.

 

다음은 @Bean과 @Component에 대한 구체적인 설명이다.

 

1) @Bean : 이미 스프링 컨테이너에 존재하는 외부라이브러리나 스프링 내부 클래스를 등록하는건 안된다.

                   그 객체에서 기능을 추가하거나 변경하고 싶을 때가 있을 수 있다. 그러므로 @Bean 을 통해

                   알려주어야 한다. 그런데 @Bean은 객체를 등록만 한 것이지 스프링 컨테이너에게 변경이나

                   추가가 되었다고 알려주어야 한다. 그러므로 @Configuration을 같이 써주는 것이다.

 

1) @Component : 이미 존재하는 것도 아니고 뭣도 아니다. 굳이 @Bean처럼 변경하고 스프링 컨테이너에게

                               알려주는 개념이 아니라 원래 없었던 것이기 때문에 선언과 동시에 스프링 컨테이너에

                               등록된다고 이해했다.

'Spring_SpringBoot > 이론' 카테고리의 다른 글

@Autowired, @Inject, @Resource  (0) 2024.06.28
[ AccessDeniedHandler ] VS [ AuthenticationEntryPoint ] Spring Security  (0) 2024.06.28
Spring-Security  (0) 2024.06.25
[ DTO ] vs [ VO ]  (0) 2024.06.21
[JSON] vs [XML]  (0) 2024.06.15