반응형
1. Annotation 정의 및 특징
- Java 5부터 지원하는 기능
- 소스코드에서 비즈니스 로직에는 영향을 주지 않지만, 해당 타겟에 영향을 주거나 소스코드의 구조를 변경할 수 있음
- 소스코드에 메타데이터를 삽입하는 것이기 때문에 가독성 뿐만 아니라, 전체적인 소스코드 구성하는데 도움
- Annotation 메타데이터를 프로그램 구성요소(클래스, 인터페이스, 메소드 등)과 연결 방법 제시
- 코드 라인 수를 줄이고, 선언으로 해결 함
- Annotation은 @을 앞에 붙이고, 자바에서 기본적으로 제공하는 @Deprecated, @Override, @SuppressWarnings 등이 있고, 개발자가 직접 정의하여 사용할 수 있음
2. 사전 정의된 Annotation
- 사전 정의된 Annotation에는 자바언어에 의해 사용되는 Annotation과 다른 Annotation에 영향을 주는 Annotation이 있음
- 자바언어에서 사용되는 Annotation
Annotation | 설명 |
@Override | 메소드 선언하며 지정한 메소드가 부모클래스로부터 오버라이드 된 메소드임을 명시 |
@Deprecated | 클래스, 메소드, 필드 등에 선언하며 지정한 요소가 더이상 사용되지 않음을 의미함 |
@SuppressWarning | 클래스, 메소드, 필드 등에 선언하며 선언한 영역에서 발생한 컴파일러의 경고를 제거함 |
그외에, @SafeVarargs, @FunctionalInterface 등이 있음
- 다른 Annotation에 영향을 주는 Annotation
Annotation | 설명 |
@Target | Annotation을 적용할 대상을 지정함 value값으로는 ElementType에 enum 상수인 다음의 값들을 사용할수있음
|
@Retention | Annotation 정보가 언제까지 유지될지를 지정함 value값으로는 RententionPolicy에 enum상수인 다음의 값들을 사용할수있음
|
@Documented | Annotation을 JavaDoc에 포함함 |
@inherited | 부모 Annotation을 상속받음 |
3. Custom Annotation 예제
[Maker.java]
- Maker라는 Custom Annotation을 정의하는 소스 파일
- interface앞에 @ 문자가 있음
package anotest; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) public @interface Maker { int num() default 1; String name(); String date() default "2016-03-10"; } |
[AnnTest.java]
- @Maker Annotation을 테스트 하는 소스 파일
- num과 name만 설정됨 (date는 설정되지 않았으므로 default값이 표시됨)
package anotest;import java.lang.annotation.Annotation; @Maker(num = 9, name = "james") public class AnnTest { public static void main(String[] args) { Class<AnnTest> obj = AnnTest.class; Maker maker = (Maker) obj.getAnnotation(Maker.class); System.out.println("num : " + maker.num()); System.out.println("name : " + maker.name()); System.out.println("date : " + maker.date()); } } |
위에서 AnnTest.java를 컴파일하여 실행하면, 아래와 같이 출력된다. date 값은 default 값이 출력됨을 확인할 수 있다.
num : 9 name : james date : 2016-03-10 |
상세한 내용은 아래 URL을 참조할 것
https://docs.oracle.com/javase/tutorial/java/annotations/index.html
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[Tips] 사용 브라우저 정보 및 User Agent 정보 가져오기 (0) | 2021.09.12 |
---|---|
[Tips] 자바 클래스를 생성하기 위해 사용한 JDK 버전 체크 방법 (0) | 2018.03.15 |
[Tips] JVM Monitoring and Troubleshooting Map (0) | 2015.03.26 |
[개요] Java 직렬화(Serialization) 이해 (0) | 2015.03.10 |
[예제] 간단한 JNI 예제 작성 (1) | 2015.03.08 |