Be ready to study forever - 개발자 꿈나무
[JAVA] Annotation - 에너테이션 본문
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 |