📘 어노테이션
- 클래스나 메소드 등의 선언에 '@'를 사용하는 것
- 컴파일러에게 정보를 알려줄 때 사용
- 컴파일, 설치시의 작업을 지정할 때 사용
- 실행할 때 별도의 처리가 필요한 경우 사용
- 어노테이션은 상속되지 않음
📚 미리 정해져 있는 어노테이션
1️⃣ @Overrride
public class OverrideCheck extends Parent{
public OverrideCheck(String name) {
super(name);
}
@Override
public String printName(String name) {
return super.printName(name);
}
}
- 부모 클래스에 있는 메소드를 Override 했다는 것을 명시적으로 선언
2️⃣ @Deprecated
@Deprecated
public String printAnything(String word){
return word;
}
- 클래스나 메소드가 더 이상 사용되지 않는 것을 선언, 사용시 경고
- 에러가 아닌 경고이기 때문에 @Deprecated 어노테이션이 선언된 메소드나 클래스를 사용하여도 컴파일 되어 클래스 파일은 생성됨
3️⃣ @SupressWarnings
@SuppressWarnings("deprecated")
public String printDeprecatedMethod(String word){
return printAnything(word);
}
- 의도적으로 코딩한 것임을 명시하여 경고를 받지 않음
- 소괄호 속에 문자열을 넘겨줄 수 있음
📚 어노테이션을 선언하기 위한 메타 어노테이션
1️⃣ @Target([적용할 타입])
- 어노테이션을 어떤 것에 적용할지 선언할 때 사용
요소타입 | 대상
CONSTRUCTOR | 생성자 선언시
FIELD | enum 상수를 포함한 필드값 선언시
LOCAL_VARIABLE | 지역변수 선언시
METHOD | 메소드 선언시
PACKAGE | 패키지 선언시
PARAMETER | 매개변수 선언시
TYPE | 클래스, 인터페이스, enum 등 선언시
2️⃣ @Retention
- 얼마나 오래 어노테이션 정보가 유지되는지 선언
SOURCE | 컴파일시 사라짐
CLASS | 컴파일러에 의해서 참조 가능, 가상머신에서는 사라짐
RUNTIME | 가상머신에 의해서 잠조 가능
3️⃣ @Documented
- 어노테이션 정보가 javadocs 문서에 포함된다는 것을 선언
4️⃣ @Inherited
- 모든 자식 클래스에서 부모 클래스의 어노테이션을 사용 가능함을 선언