본문으로 바로가기

Annotaion 의 정의

category 개발/어노테이션 2022. 7. 10. 16:16
728x90

어노테이션(Annotation) 이란?

  • 소스코드에 추가하여 사용할 수 있는 메타 데이터의 일종
  • 주석이라는 의미를 가지고 있음
  • 자바 소스코드에 @기호를 이용하여 사용
  • JDK 1.5 버전 이상에서만 사용가능

어노테이션의 종류

  • 표준(내장) 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
  • 메타 어노테이션 : 어노테이션을 위한 어노테이션
  • 사용자 정의 어노테이션 : 사용자가 직접 정의하는 어노테이션

표준 어노테이션

  1. @Override
  2. @Deprecated
  3. @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();
}
728x90

'개발 > 어노테이션' 카테고리의 다른 글

[Annotation] Lombok 어노테이션 정리  (0) 2022.07.10
[Annotation] 정리하기  (0) 2022.07.10