애너테이션 (@)
애너테이션이란 ?
- 주석처럼 프로그래밍 언어에 영향을 미치지않으며 , 유용한 정보를 제공 (소스코드설명+소스코드)
-
Junit 이라는 설정정보제공을 위한것 // 예전에는 XML
- /**
- *
- ** / < javadoc.exe 주석>
@Override
- 오버라이딩을 올바르게했는지 컴파일러가 체크하게함
- 오버라이딩 할때 메서드 이름을 잘못적는 실수를 하는 경우가많다
대,소문자
-
오버라이딩 할때는 메서드 선언부 앞에 @Override 를 붙이자
class Parent { void parentMethod() {} } class Child extends Parent { @Override void parentmethod() {} // @Override 적으먼 소문자틀린걸 컴파일러가 알아채게함 }
@Deprecated
- 앞으로 사용하지 말라는 권장하는 애너테이션 , 필드나 메서드에 붙임
-
@Deprecated의 사용예 , Date 클래스의 getDate()
@Deprecated public int getDate() { return normalize().getDayOfMonth(); }
@Functionallnterface
- 함수형 인터페이스에 붙이면 , 컴파일러가 올바르게 작성했는지 체크
- 함수형 인터페이스에는 딱 하나의 추상메서드만을 가져야한다는 제약이있음
@SuppressWarnings
- 컴파일러의 경고메시지가 나타나티않게 억제함
- ()안에 억제하고자하는 경고의 종류를 문자열로지정
@SuppressWarnings(“unchecked”) // 지네릭스와 관련된 경고를 억제. ArrayList list = new ArrayList(); // 지네락 타입(지네릭클래스)을 지정하지 않았음. list.add(obj); // 여기서 경고가 발생
- ‘-Xlint’ 옵션으로 컴파일하면 , 경고메시지를 확인할수있다. 괄혼[]안이 경고의 종류. 아래의경우 rawtypes
메타애너테이션
@Target
-
애너테이션을 정의할때 , 적용대상에 지정에 사용
import static java.lang.annotation.ElementType.*; @Target({FIELD , TYPE , TYPE_USE}) public @interface MyAnnotation {} @MyAnnotation // 적용 대상이 TYPE 인경우 class MyClass { @MyAnnotation // 적용 대상이 FIELD 인경우 int i ; @MyAnnotation // 적용대상이 TYPE_USE 인경우 MyClass mc; }
@Retention
- 애너테이션이 유지(retention) 되는 기간을 지정하는데사용
- SOURCE : 소스 파일에만 존재 , 클래스파일에는 존재하짖않음 ,컴파일러
- RUNTIME : 클래스파일에 존재 , 실행시 사용가능
- CLASS : 클래스파일에 존재 , 실행시 사용불가 .기본값 // 잘사용하지않음
-
컴파일러에 의해 사용되는 애너테이션의 유지정책은 SOURCE이다.
- 실행시에 사용가능한 애너테이션의 정책은 RUNTIME 이다 .
@Documented , @Inherited
-
javadoc 으로 작성한문서에 포함시킬때 사용
-
애너테이션을 자손클래스에 상속하고자 할때 ,@Inherited
@Repeatable
- 반복해서 붙일수 있는 애너테이션을 정의할때 사용
- @Repeatable 이 붙은 애너테이션은 반복해서 붙일수있다
- @Repeatable 인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야함
애너테이션 타입 정의하기
- 조상은 > Annotation 은 인터페이스이다
- 애너테이션을의 추상메서드를 따로 내가 정의해서사용할수있음
- 적용시 값을 지정하지 않으면 , 사용될수있는 기본값 지정가능(null 제외)
- 요소가 하나이고 이름이 value 일때는 이름생략가능
- 배열인경우 값이없을떄 {} 여러개 {} 값이1개면 {}생략가능
마커 애너테이션
- 요소가 하나도 정의되지 않은 애너테이션 {}< 안에없음
애너테이션의 규칙
- 애너테이션의 요소를 선언할때 아래의 규칙을 반드시 지켜야한다 요소의 타입은 기본형 , String ,enum , 애너테이션 , Class(설계도) 만 허용됨 추상메서드, 괄호()안에 매개변수를 선언할수없다 예외를 선언할수없다 요소를 타입 매개변수 <> 지네릭 으 로 정의할수없다
Leave a comment