[Java] Annotation(어노테이션)

재영양·2022년 11월 9일
0

Study

목록 보기
11/14

Annotation, 어노테이션


  • 어노테이션은 클래스나 메소드위에 작성하고, @ (at)기호를 앞에 붙여서 사용한다.
  • 어노테이션을 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통하여 클래스가 좀 더 다르게 실행되게 할 수 있다.이런 이유로 어노테이션을 일정의 설정파일처럼 설명하는 경우도 있다.

@Override

메소드를 오버라이드하겠다는 의미로 메소드의 선언 앞에 붙여준다. 만약 상속받은 부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드가 없다면 컴파일 오류가 발생한다.

@Override
public void getInfo() {
  System.out.println("test");
}

@Deprecated

메소드를 Deprecated 시킨다. 이 메소드를 사용하는 애플리케이션을 컴파일 할 경우 컴파일 경고가 발생한다. 하위호환을 위해서 메소드 자체를 없애지는 못하지만 사용하지 말 것을 사용자에게 알리고 싶을 때 붙여준다.

@Deprecated
public void deprecatedMethod() {
  System.out.println("test");
}

@SupressWarnings

컴파일러 경고를 출력하지 않도록 설정한다. SuppressWarnings 어노테이션은 인자를 받는데 인자에 따른 의미는 다음과 같다.

  • @SuppressWarnings("all") : 모든 경고를 억제
  • @SuppressWarnings("cast") : 타입 캐스트관련 경고 억제
  • @SuppressWarnings("dep-ann") : 사용하지 말아야할 주석 관련 경고 억제
  • @SuppressWarnings("deprecation") : Deprecated 메소드를 사용한 경우 발생하는 경고 억제
  • @SuppressWarnings("fallthrough") : switch문에서 break 구문 누락 관련 경고 억제
  • @SuppressWarnings("finally") : finally 블럭 관련 경고 억제
  • @SuppressWarnings("null") : null 관련 경고 억제
  • @SuppressWarnings("rawtypes") : 제너릭을 사용하는 클래스 매개 변수가 특정되지 않았을 때의 경고 억제
  • @SuppressWarnings("unchecked") : 검증되지 않은 연산자 관련 경고 억제
  • @SuppressWarnings("unused") : 사용하지 않는 코드 관련 경고 억제

컴파일러 경고는 경고일 뿐, 경고 상황을 개발자가 알고 있는 경우에는 컴파일 로그가 지저분해지고 진짜 잡아야하는 경고들이 잘 보이지 않을 수 있기 때문에 이 어노테이션을 쓰게 된다.



어노테이션은 위 어노테이션처럼 자바가 기본으로 제공해주는 것도 있고, 사용자가 직접 만들 수도 있다.
사용자가 직접 작성하는 어노테이션을 커스텀 어노테이션이라고 말하는데, 커스텀 어노테이션을 만들 때 사용하는 메타 어노테이션들도 있다. 메타 어노테이션에 대해서 잘 알고 있어야 정확히 원하는 커스텀 어노테이션을 만들어 사용할 수 있다.


메타 어노테이션


@Retention

어노테이션의 보유 기간을 명명한다.

  • RetentionPolicy.Class : 바이트 코드 파일까지 어노테이션 정보를 유지하고, 리플렉션을 이용해서 어노테이션 정보를 얻을 수는 없다.
  • RetentionPolicy.Runtime : 바이트 코드 파일까지 어노테이션 정보를 유지하면서 리플렉션을 이용해 런타임에 어노테이션 정보를 가져온다.
  • RetentionPolicy.Source : Compile 이후에 삭제된다.

@Documented

자바 문서에도 어노테이션 정보가 포현된다.

@Target

생성할 어노테이션이 적용될 수 있는 위치를 나열한다.

@Inherited

자식 클래스가 어노테이션을 상속받을 수 있다.

@Repeatable

반복적으로 어노테이션을 선언할 수 있다.


커스텀 어노테이션


커스텀 어노테이션을 이용하는 방법

  1. @interface [어노테이션 이름]이라는 형태로 어노테이션을 정의한다.
  2. 생성되는 어노테이션에 대한 메타 어노테이션을 어노테이션 정의 앞쪽에 붙여준다.
  3. 어노테이션을 클래스에서 사용한다. (타겟에 적용)
  4. 어노테이션을 이용하여 실행.
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
        String value() default "MyAnnotation : default value"
}

class MyObject {
    @MyAnnotation
    public void testMethod1() {
        System.out.println("This is testMethod1");
  }

    @MyAnnotation(value = "My new Annotation")
    public void testMethod1() {
        System.out.println("This is testMethod1");
  }
}

0개의 댓글