Java Annotation 기본
- 어노테이션
- 코드수준에서 활용 가능한 주석형 자료
- 어노테이션은 인터페이스
- 컴파일, 실행 과정(런타임)에서 코드를 어떻게 처리할지 명시한 정보
- 문법적 오류를 보다 강력하게 검사할 수 있는 정보 제공
- IDE같은 소스코드 작성 도구가 코드를 생성할 수 있는 근거
- 런타임에 특정 기능을 실행하거나 역할을 정의
- 런타임에 활용할 수 있는 정보 담을 수 있음
- 이미 활용되공있는것 외에 타입 정의를 통해 추가 어노테이션 개발 가능
- 런타임때 코드 어케 처리할지 확인하려면 '리플렉션'개념이 필요
- 런타임때 어노테이션에 들어있는 값 확인하려면..
- 외부 모둘(프레임 웍 같은거)... 이 읽을 수 있다는게 중요
- 윈도우 DLL 같은걸로 비유되네
- 기본 메타 어노테이션
- @Override
- 가독성을 위해 매우 유용
- 과거에 만든 코드에 의해 이거 붙은 메서드가 호출 당하는 것
- 덮어쓰기한것
- @Deprecated
- @SuppressWarnings(경고 무시)
- @Retention(생존 기간, 유효 시점) ***
- @Target(적용 대상) ***
- @Documented(문서 생성 시 어노테이션 포함)
- @Inherited(파생 클래스에서 어노테이션 상속)
어노테이션 직접 정의
public @interface 이름 {}
- 내부적으로는
java.lang.annotation.Annotatino 인터페이스를 묵시적으로 상속 받아 만들어짐
- 내부에 엘리먼트를 멤버로 가질 수 있으며, 각 엘리먼트는 클래스 필드와 유사
- 타입 엘리먼트명() [default 값];
int a() default 10;
- 어노테이션 적용은 @이름 형식이며 적용기능 대상에 한정해 기술
- 적용 대상 @Target
- TYPE
- ANNOTATION_TYPE
- FILED
- CONSTRUCTOR
- METHOD
- LOCLA_VARIABLE
- PACKAGE
- 어노테이션 유지 정책
java.lang.annotation.RetentionPolicy
- SOURCE
- CLASS
- .class 파일 수준 까지 유지하지만 Reflection으로 어노테이션 정보를 얻을 수 는 없음
- RUNTIME
- .class 파일 수준까지 유지하며 Reflection으로 언테이션 정보 획득 가능
- 정리
- 어노테이션은 외형적으로 주석에 가까워 보이지만, 실상은 값을 가지는 인터페이스 클래스
- Java 에서는 클래스를 빌드해 얻을 수 있는 .class 파일은 독립적인 모듈처럼 재사용 가능
- 컴파일 타임에 객체간 의존 관계 규정하는 정적인 처리방법과 달리 런타임 의존관계를 규정할 수 있는 모듈 기반 프로그래밍 환경에서 더 강력한 힘 발휘