| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 미니정리
- SQL
- 데이터베이스
- MySQL
- 프론트엔드
- node.js
- 오라클
- 프런트엔드
- spring
- BACK-END
- 코드 테스트
- java
- 프로그래머스
- Next.js
- 정리
- 스프링부트
- 디자인 패턴
- 자바
- oracle
- jsp
- 서버
- 코드테스트
- web
- JavaScript
- 알고리즘
- 백엔드
- 쿼리
- 자바스크립트
- 스프링
- jpa
- Today
- Total
참치코더의 꿈 메모장
메타 애너테이션(Annotation) - Java - 2021/08/31 본문
메타 애너테이션
매타 애너테이션은 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때
애너테이션의 적용대상(target) 이나 유지기간(retention) 등을 지정하는데 사용된다.
@Target
애너테이션이 적용가능한 대상을 지정하는데 사용된다.
* 여러 개의 값을 지정할 때는 배열에서처럼 괄호{ }를 사용해야한다.
@Target : 애너테이션 적용대상의 종류
| ANNOTATION_TYPE | 애너테이션 |
| CONSTRUCTOR | 생성자 |
| FIELD | 필드(멤버변수, enum상수) |
| LOCAL_VARIABLE | 지역변수 |
| METHOD | 메서드 |
| PACKAGE | 패키지 |
| PARAMETER | 매개변수 |
| TYPE | 타입(클래스, 인터페이스, enum) |
| TYPE_PARAMETER | 타입 매개변수 |
| TYPE_USE | 타입이 사용되는 모든 곳 |
@Retention
애너테이션이 유지되는 기간을 지정하는데 사용된다.
| SOURCE | 소스 파일에만 존재. 클래스파일에는 존재하지 않음. |
| CLASS | 클래스 파일에 존재. 실행시에 사용불가. 기본값 |
| RUNTIME | 클래스 파일에 존재. 실행시에 사용가능. |
컴파일러가 사용하는 애너테이션은 유지 정책이 SOURCE이다.
유지 정책을 RUNTIME으로 하면 실행 시에 리플렉션을 통해 클래스 파일에 저장된
애너테이션의 정보를 읽어서 처리할 수 있다.
유지 정책 CLASS는 컴파일러가 애너테이션의 정보를 클래스파일에 저장할 수 있게는 하지만,
클래스 파일이 JVM에 로딩될 때는 애너테이션의 정보가 무시되어 실행 시에 애너테이션에 대한 정보를 얻을 수 없다.
@Documented
애너테이션에 대한 정보가 javadoc으로 작성된 문서에 포함되도록 한다.
@Inherited
애너테이션이 자손 클래스에 상속되도록 한다. @Inherited가 붙은 애너테이션을 조상 클래스에 붙이면,
자손클래스도 이 애너테이션이 붙은 것과 같이 인식된다.
@Repeatable
보통은 하나의 대상에 한 종류의 애너테이션을 붙이는데, @Repeatable이 붙은 애너테이션은 여러 번 붙일 수 있다.
일반적인 애너테이션과 달리 같은 이름의 애너테이션이 여러 개가 하나의 대상에 적용될수 있기 때문에,
이 애너테이션들을 하나로 묶어서 다룰 수 있는 애너테이션도 추가로 정의해야 한다.
@Native
네이티브 메서드에 의해 참조되는 상수 필드에 붙이는 애너테이션이다.
* 네이티브 메서드 : JVM이 설치된 OS의 메서드를 말한다.
* 모든 클래스의 조상인 Object클래스의 메서드들은 대부분 네이티브 메서드이다.
애너테이션 만들기
@interface 애너테이션이름 {
타입 요소이름( );
}
* 애너테이션 내에 선언된 메서드를 애너테이션의 요소라고 한다.
애너테이션의 요소는 반환값이 있고, 매개변수는 없는 추상 메서드의 형태를 가지고,
상속을 통해 구현하지 않아도 된다.
그러나 애너테이션을 적용할 때 이 요소들의 값을 빠짐없이 지정해 주어야 한다.
* 요소의 이름도 같이 적어주므로 순서는 상관없다.
* 애너테이션의 각 요소는 기본값을 가질 수 있으며, 기본값이 있는 요소는 애너테이션을 적용할 때
값을 지정하지 않으면 기본값이 사용된다.
* 애너테이션 요소가 오직 하나뿐인 경우, 애너테이션을 적용할 때 요소의 이름을 생략하고
값만 적어도 된다.
java.lang.annotation.Annotation
모든 애너테이션의 조상은 Annotation이다.
그러나 상속이 허용되지 않으므로 명시적으로 Annotation을 조상으로 지정할 수 없다.
마커 애너테이션 (Marker Annotation)
값을 지정할 필요가 없는 경우, 애너테이션의 요소를 하나로 정의하지 않을 수 있다.
요소가 하나도 정의되지 않은 애너테이션을 마커 애너테이션이라고 한다.
애너테이션 요소의 규칙
1. 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용된다.
2. ( )안에 매개변수를 선언할 수 없다.
3. 예외를 선언할 수 없다.
4. 요소를 타입 매개변수로 정의할 수 없다.
'JAVA' 카테고리의 다른 글
| 바이트기반의 보조스트림 - java /2021/09/08 (0) | 2021.09.08 |
|---|---|
| Java - 바이트기반 스트림 2021/09/06 (0) | 2021.09.06 |
| 표준 애너테이션(Annotation) - Java - 2021/08/30 (0) | 2021.08.30 |
| 2021/08/27 Java - 열거형(enums) (0) | 2021.08.27 |
| 2021/08/26 Java - Generics(지네릭스) (0) | 2021.08.26 |