[Java]::Remind - Annotation

Gentlee's Self-Study Log·2023년 5월 24일
0

Java Reminder

목록 보기
18/19
post-thumbnail

Annotation - 어노테이션

어노테이션은 실행문은 아니지만, 정보를 제공하도록 하는 표시이다.

  • 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다.
  • 빌드 실행 혹은 배치 시 정보를 제공한다.
  • 실행 시 특정 기능을 실행하도록 정보를 제공한다.

표준 어노테이션

@Override

메소드를 오버라이드 했을 때 하는 표시이다.

Example :

@Override
public String toString(){
	실행문
}

@Deprecated

지금은 사용하고 있지만, 추후에 없어지거나 바뀔 내용에다가 표시하는 어노테이션이다. 어노테이션 선언 시 메소드 이름에 선이 그어진다.

Example :

@SuppressWarning

객체가 변수를 선언하고 사용안할 때, 객체를 생성하고 Serial번호를 생성 안했을 때, 혹은 List를 선언해놓고 타입지정을 안했을 때처럼 경고 에러가 생기는 것을 막아주는 어노테이션이다.

Example :

@SuppressWarning("rawtype")
public void setMessageList(){
	List list = new ArrayList();
}

@FunctionalInterface

인터페이스에 선언이 되는 어노테이션이지만, 특히 메소드 하나만을 가지고 있는 인터페이스에 선언된다. 메소드가 두개인 인터페이스에 선언되면 에러가 표시된다.

@SafeVarargs

코드를 작성한 사람이 이 메서드는 타입 안정성을 보장한다는 뜻으로 달아두는 어노테이션이다.
주로 제네릭스(Generics)를 사용하는 곳에서 많이 쓰이는 편이다. 제네릭스는 어떤 타입이 들어올지 모르기 때문에 @SafeVarags를 적용하면 타입 안정성이 있다는 뜻으로 타입 안정성이 보장되지 않은 unchecked cast는 경고 메시지가 나오지 않는다. 하지만 varargs 경고 메시지는 억제할 수 없기 때문에 @SafeVarargs를 사용한다면 @SuppessWarning("varargs")도 같이 사용해야 한다.

사용자 정의 어노테이션

@interface

말그대로 사용자가 임의로 만드는 어노테이션이다. @interface를 이용하여 어노테이션을 생성할 수 있다.

Example :

public @interface Check{
	String value();
    int num() default 1;
}

@Check("first")
@Check(value="second",num=5)

@Target

어노테이션을 만들고 이 어노테이션을 어디에 쓸지 지정하는 어노테이션이다.

Example :

@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Check{                         

}

Check 어노테이션은 클래스(TYPE)앞이랑 메소드(METHOD)앞에서만 사용가능하도록 @Target으로 지정해놓는다.

@Retention

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Check{      

}

클래스 정보 추출 메소드

getConstructors( ) : 클래스가 갖고있는 모든 생성자를 리턴함
return : Constructor[ ]
getDeclaredMethods( ) : 클래스가 갖고있는 모든 메소드를 리턴함
return : Method[ ]

어노테이션 정보 추출 메소드

isAnnotationPresent(Class<? extends Annotation> a)

: 인자의 어노테이션이 적용되었는지 여부를 판단하는 메소드
return : boolean

getAnnotation(Class a)

: 인자의 어노테이션을 리턴, 없다면 null 리턴
return : Annotation

getAnnotations( )

: 적용한 모든 어노테이션을 리턴
return : Annotation[ ]

profile
https://github.com/SamGentlee

0개의 댓글