어노테이션
어노테이션이란
어노테이션은 메타 데이터로서.
어노테이션 자체는 어노테이션이 붙은 코드 동작에 영향을 미치지 않음
작성한 코드에 대해 추가적인 정보를 제공하면서, 컴파일, 런타임 시점에 해당 코드에 대한 추가적인 처리를 해줌
언제 쓸까?
- 컴파일러에게 필요한 정보 제공
- 컴파일/배포 시에 필요한 처리 기능
- 런타임에 필요한 처리 제공 (java reflection)
메타 어노테이션
어노테이션을 위한 어노테이션, 어노테이션을 정의할 때 사용
표준 annotation
- @Override
- 메서드 앞에만 붙일 수 있음
- 메서드를 오버라이딩 하는 것임을 컴파일러에게 알려주는 역할
- 아래와 같이 오버라이딩 할 때 메서드 이름을 잘못 적을 경우 컴파일러는 새로운 메서드가 추가되었다고 생각할 뿐이지 오류가 발생하지 않았다고 생각한다. 반면 @Override를 붙여주면 이를 잡을 수 있다
- @Deprecated
- 새로운 버전의 JDK가 소개될 때 기존의 기능을 대체할 것들이 추가되어도, 기존의 기능을 사용하고 있을 상황을 고려해 만들어진 어노테이션이다.
- 이 어노태이션이 붙은 대상은 더 이상 사용하지 않을 것을 권한다는 의미
```java
Deprecated
As of JDK version 1.1,
replaced by Calendar.get(Calendar.DAY_OF_MONTH)
```
- @SuppressWarnings
- 컴파일러가 보여주는 경고메시지가 나타나지 않게 억제해줌
- @SafeVarargs
- @FunctionalInterface
- 함수형 인터페이스를 선언할 때 이 애노테이션을 붙이면 컴파일러가 함수형 인터페이스를 올바르게 선언했는지 확인하고, 잘못된 경우 에러를 발생시킴
- @Native
- 네이티브 메서드에 의해 참조되는 상수 필드에 붙이는 어노테이션, 네이티브 메서드는 JVM이 설치된 OS의 메소드
커스텀 어노테이션 정의하는 방법
쉽다
어노테이션을 통해 정의해 둔 값을 추출하여 런타임에 필요한 세팅을 해줄 수 있고, 이러한 원리로 스프링에서는 @GetMapping을 통해 매핑될 URL을 지정해 줄 수가 있다.