Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- AWS
- Endpoints
- cognito
- transit gateway
- 구조분해 할당
- 비구조화 할당
- Site-to-Site VPN
- On-Premise
- docker swarm
- 자바스크립트
- Custom Resource
- 옵셔널 체이닝
- optional chaining
- VPC
- Await
- Kubernetes
- CloudFormation
- 단축 평가
- grafana
- DynamoDB
- 온프레미스
- Service
- Proxy Resource
- prometheus
- elasticsearch
- api gateway
- null 병합 연산자
- JavaScript
- docker
- vgw
Archives
- Today
- Total
만자의 개발일지
[Java] Annotation 이란 본문
Annotation
어노테이션은 Java5에 추가된 기능으로 사전적 의미로는 주석을 뜻합니다. 이 어노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 코드를 더 깔끔하게 해주는 효과가 있습니다. 무엇보다 가장 큰 비중은 소스코드에 메타 데이터를 삽입하는 것이라고 볼 수 있습니다.
메타 데이터: 데이터를 설명하기 위한 데이터이다. 예를 들어 사진에 날짜와 시간, 위치 같은 데이터를 메타 데이터라고 볼 수 있다.
어노테이션의 사용 용도는 크게 3가지 입니다.
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공
- 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행시(Runtime) 특정 기능을 실행하도록 정보를 제공
Java에서 기본적으로 제공하는 어노테이션
java.lang | |
@Override | - 해당 메서드가 오버라이드된 메서드라는 것을 명시합니다. - 부모 클래스 혹은 인터페이스에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다. |
@FunctionalInterface | - 해당 인터페이스가 함수형 인터페이스라는 것을 명시합니다. - 메서드가 존재하지 않거나, default, static 메서드를 제외한 2개 이상의 메서드가 존재할 경우 컴파일 오류를 발생 시킵니다. |
@Deprecated | - 해당 메서드가 더 이상 사용되지 않음을 표시합니다. - 사용할 경우 컴파일 경고를 발생 시킵니다. |
@SuppressWarnings | - 선언한 곳의 컴파일 경고를 무시합니다. |
@SafeVarargs | - Generic 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다. |
java.lang.annotation | |
@Retention | - 컴파일 시 어노테이션을 어느 시점 까지 유지할 것인지 결정합니다. |
@Target | - 어노테이션을 어디에 적용할 것인지를 지정합니다. |
@Inherited | - 어노테이션의 상속을 가능하게 합니다. |
@Documented | - 해당 어노테이션을 Javadoc에 포함시킵니다. |
@Native | - 해당 어노테이션을 네이티브 코드로 선언합니다. |
@Repeatable | - 연속적으로 어노테이션을 선언할 수 있게 해줍니다. |
Annotation 구현
[ TestAnnotation.java ]
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface TestAnnotation {
String value() default "hello";
int number() default 10;
}
[ AnnotationTest.java ]
public class AnnotationTest {
@TestAnnotation
public void methodA() {
System.out.println("methodA");
}
@TestAnnotation(value = "hi")
public void methodB() {
System.out.println("methodB");
}
@TestAnnotation(value = "hola", number = 1004)
public void methodC() {
System.out.println("methodC");
}
}
[ Main.java ]
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
Method[] methods = AnnotationTest.class.getMethods();
for(Method method : methods) {
//@TestAnnotation이 적용된 메소드라면
if(method.isAnnotationPresent(TestAnnotation.class)) {
System.out.println(method.getName());
//적용된 어노테이션 중 @TestAnnotation을 반환
TestAnnotation annotation = method.getDeclaredAnnotation(TestAnnotation.class);
System.out.println(annotation.value());
System.out.println(annotation.number());
}
}
}
}
실행 결과
methodA
hello
10
methodB
hi
10
methodC
hola
1004
참고
'Java > Java' 카테고리의 다른 글
[Java] ArrayList 상속으로 foreach 구현 (0) | 2022.01.17 |
---|---|
[Java] SOAP API 사용하기 (feat.Maven) (0) | 2022.01.17 |
[Java] DocumentBuilderFactory 와 DocumentBuilder (1) | 2022.01.14 |
[Java] new 연산자란 (0) | 2021.06.21 |
[Java] 리터럴(literal)이란? (0) | 2021.06.18 |
Comments