JAVA 5버전부터 추가된 기능으로, 클래스나 메소드 위에 붙여서 사용합니다.
ex) @Override
소스코드에 메타코드(추가정보)를 주는 것으로,
클래스가 컴파일 되거나 실행될 때 어노테이션의 유무나 어노테이션의 설정된 값을 통해서 클래스를 다르게 실행되게 할 수 있습니다.
어노테이션의 용도는 다음과 같습니다.
1) 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공합니다.
ex) @Override => 메소드가 재정의 되어있는지 확인합니다.
2 ) 실행(런타임)시 특정 기능을 실행하도록 정보를 제공합니다.
ex) 객체가 애플리케이션 내부에서 해야할 역할을 정의할 수 있습니다. (@Controller, @Servlet...)
이 어노테이션은 기본적으로 제공되는 것이 있고, 사용자가 직접 만들어서 사용할 수 있는데 이를 커스텀 어노테이션이라고 합니다.
커스텀 어노테이션 만드는 과정
1. 정의
package javaUtil.exam;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Count100 {
}
2. 사용
package javaUtil.exam;
public class MyHello {
@Count100
public void hello() {
System.out.println("hello");
}
}
3. 실행
package javaUtil.exam;
import java.lang.reflect.Method;
public class MyHelloExam {
public static void main(String[] args) {
MyHello hello = new MyHello();
try {
Method method = hello.getClass().getDeclaredMethod("hello");
if(method.isAnnotationPresent(Count100.class)) {
for(int i=0; i<100; i++) {
hello.hello();
}
}else {
hello.hello();
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Count100이라는 어노테이션이 Hello클래스의 hello메소드에 적용되었으므로
hello메소드가 100번 호출됩니다.
여기서 사용한 @Retention은 애노테이션을 선언할 때 사용하는 애노테이션입니다.
메타 애노테이션의 종류:
1) @Retention: 애노테이션 유지 범위를 지정합니다. (소스, 클래스, 런타임)
2) @Inherited: 애노테이션을 하위 클래스(자식 클래스)까지 전달여부를 지정합니다. 이 애노테이션이 있으면 하위 클래스까지 상속이 가능합니다.
3) @Target: 해당 애노테이션을 어디에 사용할 지 결정합니다. (타입, 필드, 메서드, 파라미터, 생성자, 로컬변수, 애노테이션 타입)
'Language > Java' 카테고리의 다른 글
인터페이스와 추상클래스 (0) | 2021.07.18 |
---|---|
오버라이딩과 오버로딩 (0) | 2021.07.11 |
GC에 대해 (0) | 2021.06.24 |
JVM의 구조와 자바의 구동 원리 (2) | 2021.06.16 |
클래스 다이어그램 (0) | 2021.02.05 |