2024. 2. 27. 15:09ㆍ프레임워크(Framework)/Spring
어노테이션(Annotation)이란?
어노테이션(annotation)은 사전적 의미로는 주석을 의미한다.
프로그래밍에서 주석은 개발자의 입장에서 더 직관적이고 코드를 이해하기 쉽게 하며, 다른 사람에게 설명할 수 있도록 정보를 제공하는 역할이다.
어노테이션 또한 주석과 비슷한 역할을 담당한다고 할 수 있다. 하지만 일반적인 주석과는 다르게 어노테이션은 코드를 작성할 수 있다.
또한 그 코드에 특별한 의미를 부여하거나 기능을 주입할 수 있다. 그리고 해석되는 시점을 정할 수도 있다.
즉, 어노테이션은 프로그램의 소스 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것을 의미한다.
주석과 어노테이션의 차이점이 있다면, 주석은 '사람'에게 정보를 제공하는 것이고, 어노테이션은 특정 코드를 사용하는 '프로그램'에게 정보를 전달한다.
어노테이션은 @을 사용하여 작성하며, 해당 타겟에 대한 동작을 수행하는 프로그램 외에는 다른 프로그램에게 영향을 주지 않는다.
예시
@Controller //어노테이션
public class HelloController {
}
어노테이션(annotation)의 특징
1. 컴파일러에게 문법 에러를 체크하도록 정보를 제공한다.
2. 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
3. 런타임에 특정 기능을 실행하도록 정보를 제공한다.
4. 어노테이션을 사용하면 코드가 깔끔해지고 재사용이 가능하다.
어노테이션(annotation)의 종류
@ComponentScan
@Component와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아서 Context에 bean 등록을 해주는 어노테이션이다.
@Component Annotation이 있는 클래스에 대하여 bean 인스턴스를 생성
ApplicationContext.xml에 <bean id="dandan" class="dandan" /> 와 같이 xml에 bean을 직접 등록하는 방법도 있고 위와 같이 Annotation을 붙여서 하는 방법도 있다.
base-package를 넣으면 해당 패키지 아래에 있는 컴포넌트들을 찾고 그 과정을 spring-context-버전(4.3.11.RELEASE).jar에서 처리한다.
+) spring에서 @Component로 다 쓰지 않고 @Service, @Repository, @Controller, @Configuration 등을 사용하는 이유는, 예를 들어 @Repository는 DAO의 메소드에서 발생할 수 있는 unchecked exception들을 스프링의 DataAccessException으로 처리할 수 있기 때문이다.
또한 가독성 측면에서도 해당 어노테이션을 갖는 클래스가 무엇을 하는지 단번에 알 수 있다.
+) 자동으로 등록되는 bean의 이름은 클래스의 첫문자가 소문자로 바뀐 이름이 자동적용된다.
ex) HomeController -> homeController
@Component
@Component는 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 어노테이션이다.
@Component
public class Student {
public Student() {
System.out.println("hi");
}
}
@Component(value="mystudent")
public class Student {
public Student() {
System.out.println("hi");
}
}
Component에 대한 추가 정보가 없다면 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용된다.
하지만 @Bean과 다르게 @Component는 name이 아닌 value를 이용해 Bean의 이름을 지정한다.
@Bean
@Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려할 때 사용되는 어노테이션이다.
@Configuration
public class ApplicationConfig {
@Bean
public ArrayList<String> array(){
return new ArrayList<String>();
}
}
ArrayList같은 라이브러리 등을 Bean으로 등록하기 위해서는 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고 @Bean Annotation을 사용하면 된다.
위의 경우 @Bean에 아무런 값을 지정하지 않았으므로 Method 이름을 camelCase로 변경한 것이 Bean id로 등록된다.
즉 위의 예제에서는 array()가 Bean id로 등록된다.
@Configuration
public class ApplicationConfig {
@Bean(name="myarray")
public ArrayList<String> array(){
return new ArrayList<String>();
}
}
위와 같이 @Bean에 name이라는 값을 이용하면 자신이 원하는 id로 Bean을 등록할 수 있다.
@Autowired
속성(field), setter method, constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean을 주입 해준다.
무조건적인 객체에 대한 의존성을 주입시킨다. 이 Annotation을 사용할 시, 스프링이 자동적으로 값을 할당한다.
Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용한다.
필드, 생성자, 입력 파라미터가 여러 개인 메소드(@Qualifier는 메소드의 파라미터)에 적용 가능하다.
Type을 먼저 확인한 후 못 찾으면 Name에 따라 주입한다.
Bean을 주입받는 방식(3가지)
1. @Autowired
2. setter
3. 생성자 (@AllArgsConstructor 사용) -> 권장방식
@Controller
Controller annotation은 @Component를 구체화하여 만든 어노테이션으로 해당 클래스를 IoC컨테이너에 Bean으로 등록해주며 Controller로 사용된다는 것을 알려준다.
컨트롤러 역할을 하는 클래스에 지정되며, 클라이언트의 요청을 처리하고 응답을 생성하는데 사용된다.
@Controller annotation의 사용 방법
- @Controller annotation이 지정된 클래스는 일반적으로 HTTP 요청을 처리하기 위한 메소드들을 포함한다.
- 각 메소드는 @RequestMapping 어노테이션과 함께 사용하여 특정 URL 패턴에 대한 처리를 정의한다.
- @RequestMapping 어노테이션을 사용하여 요청 URL과 해당 메소드를 매핑시키고, 메소드는 요청을 처리하고 필요한 로직을 수행한 후에 응답을 생성한다.
@Controller
public class HomeController {
@RequestMapping("/")
public String home() {
return "home";
}
}
이외에도 많은 종류가 있지만 너무 광범위하므로 조금씩 추가할 예정이다.
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] IntelliJ Live template (0) | 2024.04.18 |
---|---|
[Spring Boot] WebSecurityConfigurerAdpater 지원 안함 (0) | 2024.03.18 |
[JUnit5 오류] mustache 한글만 출력 오류 인코딩 오류 (0) | 2024.03.15 |
[Spring] @RequiredArgsConstructor이란? (0) | 2024.03.07 |
entity에서 id값을 Long으로 지정하는 이유 (0) | 2024.02.20 |