애노테이션(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 |