Be ready to study forever - 개발자 꿈나무

[JAVA] Annotation - 에너테이션 본문

Programming/JAVA

[JAVA] Annotation - 에너테이션

루눌룹 2020. 7. 29. 20:57

Annotation

주석처럼 프로그램에 별다른 영향을 미치지 않지만 추가적인 정보를 달아 유용한 정보를 제공한다. @interface 와 같은 형태를 하고 있으며 컴파일시에 추가적인 정보를 전달하여 .class 파일에 적용된다.

1. 어노테이션 개요

 

1.2. 표준 어노테이션

@Override

메서드 앞에 붙어 상속받은 클래스에서 오버라이드를 제대로 했는지 체크해주는 어노테이션이다. 오버라이드한 메서드에 @Override를 붙이면 상속해주는 클래스에 이름이 같은 메서드가 있는지 확인하고 없는경우 오류를 발생시킨다. 오버라이드 할경우 @Override어노테이션이 필수는 아니지만 실수를 줄이기 위해 붙이는 것이 권장된다.

@Deprecated

해당 어노테이션은 붙이면 메서드나 프로퍼티가 다른것으로 대체되었으니 사용하지 말라는 의미이다. 그러나 강제성은 없으며 그저 컴파일시 경고 메시지를 발생시킬 뿐이다.

 

@FunctionalInterface

해당 어노테이션의 역할은 함수형 인터페이스를 선언할 때 붙여서 인터페이스가 올바르게 (함수형 인터페이스에 맞게) 선언되었는지 체크하는 역할이다. (컴파일러가 체크하지만…)

@SuppressWarnings

다른 경고 메시지를 놓치지 않기위해 @SuppressWarnings 어노테이션을 붙여서 경고메세지를 무시해야하는 경우 사용하는 어노테이션이다.

해당 어노테이션으로 억제할 수 있는 경고 메시지 종류는:

           1. deprecation - @Deprecation어노테이션에 의해 발생한 경고 메세지

           2. unchecked – 지네릭스 타입을 지정하지 않았을 때 발생하는 경고 메시지

           3. rawtype – 지네릭스를 사용하지 않아서 발생하는 경고

           4. varargs – 가변인자의 타입이 지네릭 타입일 때 발생하는 경고

@SafeVarargs

1.3. 메타 어노테이션

메타 어노테이션은 어노테이션을 정의하기 위하여 쓰는, , 어노테이션을 위한 어노테이션이다. 적용대상(@Target)이나 유지기간(@Retention)등을 정의할 때 쓴다.

@Target

어노테이션을 적용할 수 있는 대상에 사용한다.

위의 코드는 @SupperssWarnings 어노테이션을 만들 때 @Target어노테이션을 써서 @SupperssWarnings 어노테이션이 적용되는 범위를 정의한 것이다.

@Retention

어노테이션의 유지 정책을 정의하는 어노테이션이다.

유지정책은 SOURCE(@Retention(RetentionalPolicy.SORUCE))일 경우 컴파일시에 사라지게 되어 .class파일에는 존재하지 않는다, CLASS(@Retention(RetentionalPolicy.SORUCE))일 경우 컴파일후 class파일에는 존재하지만 runtime시에는 사용되지 않는다. 마지막으로 RUNTIME(@Retention(RetentionalPolicy.RUNTIME))의 경우 실행시에도 사용이 된다.

@Document

javadoc으로 작성한 문서에 포함되도록 하는 어노테이션이다. @Override@SuppressWarnings를 제외하고 모든 어노테이션에 붙어있다.

@Inherited

어노테이션이 자손클래스에 상속되도록 한다. 다시말해, @Inherited 어노테이션이 붙은 어노테이션은 상속받는 클래스에서도 해당 어노테이션이 적용된다는 것을 의미한다.

@Repeated

@Repeated어노테이션이 붙은 어노테이션은 해당 어노테이션이 반복해서 여러 번 쓰일수 있도록 한다.

@Native

'Programming > JAVA' 카테고리의 다른 글

[JAVA 문법] Enums - 열거형  (0) 2020.07.29
[JAVA 문법] 12. Generics  (0) 2020.07.29
[JAVA 문법] Collection Framework - Map  (0) 2020.07.28
[JAVA 문법] Collection Framework - Set  (0) 2020.07.28
[JAVA 문법]Collection Framework - Lists  (0) 2020.07.28
Comments