이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.
스터디할래 링크 >> https://github.com/whiteship/live-study
이필기를 시작으로 공부했습니다 >> https://b-programmer.tistory.com/264 ,
https://gowoonsori.site/java/annotation/
여기 없는내용은 스터디 할래 강의 내용 혹은 제가 java Doc보고작성하거나 예제를 만들어 추가했습니다.
그외는 같이 출처가 써있습니다.
어노테이션 정의방법 | @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE}) public @interface Deprecated { java.lang.Annotation 구현 from Bytecode 장점 : 유효성검사등 명시 , AOP 을 쉽게 구성할 수 있게해준다. 용도 : 문서화, 컴파일러 체크, 코드 분석 자동생성, 런타임 프로세싱 완전히 정적이어야 한다. final. |
빌트인 어노테이션 | Java에 내장되어 있는 어노테이션, 컴파일러를 위한 어노테이션 @Override @Deprecated @SuppressWarning 개발자가 의도를 가지고 만들었는데 컴파일이 알지못하고 경고를 띄울수있어 제거하는목적 @SafeVarargs jdk7 제네릭 같은 가변인자 매개변수 사용시 경고 무시 @FunctionalInterface |
메타 어노테이션 | 어노테이션 정의 하기 위해 사용 @Retention, @Target, @Documented, @Inherited, @Repeatable |
@Retention | 어노테이션 LIfe Time 적용범위 public enum RetentionPolicy { SOURCE, // 소스파일에만 존재, 클래스파일존재 안함 CLASS, // 클래스파일에만 존재, 런타임유지 필요없음 // default : class RUNTIME // 클래스파일에도 존재하고 런타임에 VM에 의해 유지, ==> 리플렉션 정보읽기가능 } // 정말 Runtime 설정이 필요한 정보인가? 리플렉션 XXXController.class.getAnnotation(); XXXController.class.getDeclardAnnotations();//클래스에 정의되어 있는것만 |
@Target | 어노테이션 적용대상 public enum ElementType { TYPE, //Class, Interface, enum , recode(JDK14) FIELD, METHOD, PARAMETER, // 매개변수 CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, //1.8 이후 추가. TYPE_PARAMETER, //타입메개변수 //jdk 9이후 TYPE_USE, MODULE, //jdk 14 RECORD_COMPONENT } |
@Documented | 어노테이션 정보 javaDoc 작성된 문서에 포함. 생성된문서가 어노테이션인지 여부가 차이가남. |
@Inherited | 부모에 이설정이 있는 어노테이션이 있으면 자식도 같이 씀. (하기 예시참조) |
@Repeatable | 어노테이션을 반복적으로 선언할 수 있게 하는 어노테이션 |
애노테이션 프로세서 | 어노테이션을 프로세싱 하는기술. 컴파일타임에 어노테이션들을 프로세싱하는 javac에 속한 빌드 툴로 어노테이션 소스코드를 분석하고 처리하기 위해 사용되는 훅. - 보일러플레이트코드 제거하는데 도움이 된다. : AbstractProcessort 구현하여 만들고 getter/setter 컴파일타임에 만들어서 보일러 플레이트 코드 제거. |
marker annotation | 메서드 선언 없는 인터페이스 ex) Serializable, Cloneable public interface Serializable { } |
어노테이션 에노테이션 에너테이션 어너테이션
책추천:
아웃라이어... 1만시간....
부의 추월차선.....사업. 5일을 노예처럼일하고. 노예처럼일하기위해 2일을 쉰다.
XDoclet 엑스닥렛 java5.... 에노테이션 전신
ServiceLoader : JAR 파일에 포함된 구성 파일을 읽어서 인터페이스 구현을 찾고, 구현을 선택한 오브젝트의 목록으로 사용.
serviceLoader.load(XXXX.class)
@Inherited
package study;
import java.lang.annotation.Annotation;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface InheritedAnnotation {
}
@Retention(RetentionPolicy.RUNTIME)
@interface notInherit{
}
@InheritedAnnotation
class A {}
@notInherit
class B {}
class AA extends A {}
class BB extends B {}
class test{
public static void main(String[] args) {
Class AAClass = AA.class;
Class BBClass = BB.class;
Annotation[] AAAnnotations =AAClass.getAnnotations();
for (int i = 0; i < AAAnnotations.length; i++) {
System.out.println(AAAnnotations[i]);
}
Annotation[] BBAnnotations =BBClass.getAnnotations();
for (int i = 0; i < BBAnnotations.length; i++) {
System.out.println(BBAnnotations[i]);
}
}
}
- 애노테이션 정의하는 방법
- @retention
- @target
- @documented
- 애노테이션 프로세서
'JAVA > Basic' 카테고리의 다른 글
[스터디할래? Java 14]제네릭 (0) | 2021.05.15 |
---|---|
[스터디할래? Java 13]I/O (0) | 2021.05.15 |
[스터디할래? Java 11]enum (0) | 2021.05.15 |
[스터디할래? Java 10]멀티쓰레드 프로그래밍 (0) | 2021.05.15 |
[스터디할래? Java 09]예외처리 (0) | 2021.05.14 |