어노테이션(Annotation) 이란?
- 소스코드에 추가하여 사용할 수 있는 메타 데이터의 일종
- 주석이라는 의미를 가지고 있음
- 자바 소스코드에 @기호를 이용하여 사용
- JDK 1.5 버전 이상에서만 사용가능
어노테이션의 종류
- 표준(내장) 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
- 메타 어노테이션 : 어노테이션을 위한 어노테이션
- 사용자 정의 어노테이션 : 사용자가 직접 정의하는 어노테이션
표준 어노테이션
- @Override
- @Deprecated
- @SuppressWarnings
@Override
오버라이딩을 올바르게 했는지 컴파일러가 체크
메소드의 이름을 잘못적는 실수 방지
class Parent {
void parentMethod() {}
}
class Child extends Parent {
@Override
void pparentmethod() {} // 컴파일에러 체크
}
@Deprecated
앞으로 사용하지 않을 것을 권장하는 필드나 메소드에 포함
사용 흔적은 메소드에 사용금지선get Project이 사용된 메소드가 존재함
제거하지 않고 남겨두는 이유는 자바의 호환성이 유지는 하되 권장을 하지않음
@Deprecated
public int getProject() {
return a+b=c;
}
@SuppressWarnings
컴파일러의 경고 메시지가 나타나지 않게 하는 것
발생하는 warning 에러를 억제 하여 새로운 경고나 버그 메시지를 알아보기 쉽게한다.
@SuppressWarnings("unchecked")
ArrayList list = new ArrayList(); // 타입 지정을 하지 않은 리스트
list.add(data) // 경고 발생 (내용 = unchecked)
메타 어노테이션
어노테이션을 위한 어노테이션
@Target
어노테이션을 정의 할 때, 적용 대상을 지정하는 데 사용
@Target({TYPE, FIELD, TYPE_USE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation{}
@MyAnnotation // 적용 대상이 Type(클래스, 인터페이스)
class MyClass{
@MyAnnotation // 적용 대상이 FIELD인 경우
int i;
@MyAnnotation // 적용 대상이 TYPE_USE인 경우
MyClass mc;
}
@Retention
어노테이션이 유지되는 기간을 지정하는데 사용
- SOURCE : 소스 파일에만 존재
- RUNTIME : 클래스 파일에 존재. 실행시에만 가동
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override{}
@Documented
javadoc로 작성한 문서에 포함 시키려면 해당 어노테이션 사용
@Inherited
어노테이션도 상속이 가능하며 자손 클래스에 상속하고자 할때 사용
@Inherited
@interface Super{}
@Super
class father{}
// 여기에 @Super가 붙은 것으로 인식
class brother extends father{}
@Repeatable
반복해서 붙일 수 있는 어노테이션을 정의 할 때 사용
@Repeatable(ToDos.class)
@interface ToDo {
String value();
}
@ToDo("delete test codes.")
@ToDo("override inherited methods")
class My {
}
@interface ToDos{
ToDo[] value();
}
'개발 > 어노테이션' 카테고리의 다른 글
[Annotation] Lombok 어노테이션 정리 (0) | 2022.07.10 |
---|---|
[Annotation] 정리하기 (0) | 2022.07.10 |