Java 어노테이션
어노테이션 (Annotation)
자바 어노테이션은 Java 컴파일러 및 JVM에서 사용할 수 있는 몇가지 정보를 나타내기 위한 메타데이터 입니다.
2가지 종류가 있는데 내장 주석 , 사용자 주석이 있습니다.
@Override (내장)
자바 오버라이딩할때 흔히 보는 주석입니다.
즉 하위 클래스 메서드가 상위 클래스 메서드를 재정의하게 되면 표시하는 어노테이션 입니다.
class Animal{
void eat(){
System.out.println(" 음식을 먹는중");
}
}
class Dog extends Animal{
private String name;
Dog(String name){
this.name=name;
}
@Override
void eat() {
System.out.print(name);
super.eat();
}
}
public class Main {
public static void main(String[] args) {
Dog d=new Dog("강이지");
d.eat();
}
}//강아지 음식을 먹는중
@SuppressWarnings (내장)
컴파일러에서 발생한 경고를 제외하는데 사용합니다.
내 생각에는 별로 좋지 않은 어노테이션인듯 하다.
왜냐하면 굳이 경고를 무시할 이유가 있을까? 라는 생각을 갖고 있고 그 경고가 정말 실마리같은 경고일수도 있기 때문에 별로 좋은 방법은 아닌 것 같다.
@Deprecated (내장)
이 어노테이션을 사용하면 해당 메서드는 더이상 사용되지 않음을 표시하고 만약 사용이 되었다면 컴파일러에게 경고를 보냅니다.
class A{
void m(){
System.out.println("hello m");
}
@Deprecated
void n(){
System.out.println("hello n");
}
}
public class Main {
public static void main(String[] args) {
A a=new A();
a.m();
a.n();
}
}
사용자 주석
사용자 주석을 사용할때 기억해야할 사항이 있습니다.
-
메서드에는 throw절이 없어야 합니다
-
메서드에는 매개변수가 없어야 합니다.
-
메서드는 데이터 유형,문자열,클래스,열거형 등등 이러한 데이터 유형의 배열 중 하나를 반환해야 합니다.
@Interface (사용자)
- 마커 주석
@interface MyAnnotaion{
}
- 단일 값 주석
@interface MyAnnotaion{
int value();
}
- 다중 값 주석
@interface MyAnnotaion{
int value();
String value2();
String value3();
}
@Target (사용자)
@Target 태그는 주석이 사용되는 유형을 지정하는데 사용합니다.
- 클래스에 사용
@Target(ElementType.TYPE)
@interface MyAnno{
int value();
String value2();
}
- 클래스 ,메소드 ,필드에 사용
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@interface MyAnno{
int value();
String value2();
}
@Retention (사용자)
이 어노테이션은 어노테이션에 라이플 사이클 -> 살아남는 시간을 의미합니다
RetentionPolicy | 유효성 |
---|---|
RetentionPolicy.SOURCE | 소스파일에만 존제 -> 컴파일 후 어노테이션은 사라집니다. |
RetentionPolicy.CLASS | 클래스에서 파일에서만 존재 -> ,런타임시 클래스를 메모리로 읽어오면 해당 정보는 삭제 |
RetentionPolicy.RUNTIME | 클래스 파일에 존재 , 실행시 사용가능 -> 컴파일러 , JVM에서 전부 작동합니다 |
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotation{
int value();
String name();
}
//주석 적용
class Hello{
@MyAnnotation(value = 20,name="hwan")
public void sayHello(){
System.out.println("안녕");
}
}
public class Main {
public static void main(String[] args) throws Exception {
Hello h=new Hello();
Method method=h.getClass().getMethod("sayHello");
MyAnnotation m=method.getAnnotation(MyAnnotation.class);
System.out.println("값:"+m.value());
System.out.println("이름:"+m.name());
}
}//값:20 이름:hwan
Author And Source
이 문제에 관하여(Java 어노테이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ghks285/Java-어노테이션저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)