[인프런 워밍업 클럽 0기] BE 1일차 과제

[인프런 워밍업 클럽 0기] BE 1일차 과제

[질문]

- 어노테이션을 사용하는 이유 (효과) 는 무엇일까?

컴파일러에게 코드 작성 문법 에러를 체크하도록 컴파일러에게 정보를 제공한다.

소프트웨어 개발툴을 사용할 때 빌드 또는 배치 시 코드를 자동 생성할 수 있도록 정보 제공한다.

 

실행 시 특정 기능을 실행 하도록 정보제공한다.

어노테이션

  • 사전적 의미로는

    '주석’을 뜻한다.

  • 메타 데이터의 일종

    • 메타 데이터 : application이 처리해야할 데이터가 아닌 컴파일 과정에서 코드를 어떻게 처리해야 하는지 알려주기 위한 추가 정보

 

어노테이션 종류

  • 메타어노테이션

@Target : 어노테이션이 적용 가능한 대상을 지정

@Retention : 어노테이션이 유지되는 기간을 지정

@Documented : 해당 어노테이션을 javadoc에 포함 시킴

@Inherited : 어노테이션의 상속을 가능하게 함

@Repeatable : 어노테이션을 반복해서 적용할 수 있게 함

  • 표준 어노테이션(자바에서 기본으로 제공하는 어노테이션)

@Override : 컴파일러에게 오버라딩하는 메소드라는 것을 알림

@Deprecated : 앞으로 사용하지 않을 것을 권장하는 대상에 붙임

@SuppressWarnings : 컴파일러의 특정 경고 메시지가 나타나지 않게 해 줌

 @SafeVarargs : 제네릭 타입의 가변 인자에 사용

@FunctionalInterface : 함수형 인터페이스라는 것을 알림

@Native : native 메소드에서 참조되는 상수 앞에 붙임

  • 사용자 정의 어노테이션

     

    사용자가 직접 정의하여 사용하는 어노테이션

 

- 나만의 어노테이션은 어떻게 만들 수 있을까?

 

나만의 어노테이션(커스텀 어노테이션)을 만들기 위해서는 @interface 를 사용하면 된다.

지켜야할 조건

  1. 어노테이션 타입은 자동적으로 java.lang.Annotation 인터페이스를 상속해서 다른 클래스나 인터페이스를 상속받지 않는다.

  2. 파라미터 멤버들의 접근자는 public이거나 default 이다.

  3. 파라미터 멤버들은 byte, short, char, int ,float, double, boolean의 기본 타입과 String, Enum, Class, 어노테이션만 사용할 수 있다.

 

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
    String name() default "The name";
}

 

public class MyAnnotationTest {

    @MyAnnotation(name = "커스텀 어노테이션")
    class Ano {}

    @Test
    @DisplayName("HelloWorld테스트")
    public void HelloWorldTest() throws Exception {
        Annotation[] annotations = Ano.class.getAnnotations();
        for (Annotation annotation : annotations) {
            MyAnnotation myAnnotation = (MyAnnotation) annotation;
            System.out.println("helloWorldAnnotation = " + myAnnotation.name());
        }
    }
}

 

 

댓글을 작성해보세요.

채널톡 아이콘