Annotation: 애너테이션

bo-yoon·2021년 7월 28일
0

java

목록 보기
4/6

참고

자바의 정석


애너테이션이란?

프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것


그 중 표준 애너테이션이란?

주로 컴파일러를위한 것으로 컴파일러에게 유용한 정보를 제공한다. 그리고 새로운 애너테이션을 정의할 때 사용하는 메타 애너테이션을 제공한다.

종류에 대해서 간단히 살펴보자


1. @Override

메서드 위에 붙이는 메서드가 오버라이딩 한다는 것을 컴파일러에게 알려주는 애노테이션


  @Override
  void parentmethod() { }
  

2. @Deprecated

다른 것으로 대체되었으니 더 이상 사용하지 마시오!


3. @FunctionalInaterface

함수형 인터페이스를 선언할 때 사용함

	@FunctionalInaterface
    public interface Runnable {
    	public abstract void run();
    }
    

4. @SuppressWarnings

컴파일러가 주는 경고를 나타나지 않게 함

	@SuppressWarnings("unchecked")
    ArrayList<NewClass> list = new ArrayList();
    
    
    ## 복수개 사용할때
    @SuppressWarnings({"deprecation","varargs"});
    

메타 애너테이션

애너테이션을 정의 할때 사용하는 애너테이션

그럼 이 메타 애너테이션에는 어떤 것이 있을까?

1. Target

애너테이션을 어디에 적용할 것인가?

다음과 같이 사용할 있다. 여기서 이 어노테이션은 타겟으로 타입과 필드를 지정해주었다.


@Target({Type, FIELD})
public @interface SuppressWarnings {
	String [] value();
}

적용할 수 있는 대상은 다음과 같다.


대상의미
ANNOTATION_TYPE애너테이션
CONSTRUCTOR생성자
FIELD필드( 멤버 변수, enum 상수)
LOCAL_VARIABLE지역 변수
METHOD메서드
PACKAGE패키지
PARAMETER매개변수
TYPE타입(클래스, 인터페이스, enum)
TYPE_PARAMETER타입 매개변수
TYPE_USE타입이 사용되는 모든 곳

2. Retention

애너테이션이 유지 되는 기간 설정

@Target(ElementsType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {} 

SOURCE 는 소스 파일에서만 존재, 클래스 파일에서는 존재하지 않음
CLASS 는 클래스 파일에 존재. 실행시에 사용 불가인 기본값
RUNTIME 은 클래스 파일에 존재. 실행시에 사용가능


3. Documented

  • 애너테이션 정보가 자바독스로 작성한 문서에 포함

4. Inherited

애너테이션이 자손 클래스에게 상속되도록 함

	@Inherited
    @Interface SupperAnno {} 
    
    @SuperAnno ## 상속되서 자손에게도 적용
    class Parent {} 
    
    class Child extends Parent {} 
	

5. Repeatable

여러번 붙이기 가능

	@Repeatable(ToDos.class)
    @interface ToDO {
    	String value();
    }

6. Native

상수 필드에 붙이는 애너테이션



TODO : annation 만들어보기

profile
개발 로그 🍎 🍎 🍎

0개의 댓글