반응형
애너테이션
표준 애너테이션 4가지
- @Override
- 오버라이딩을 올바르게 했는지를 컴파일러가 확인한다.
public Parent { void parentMethod() { } } class Child extends Parent { @Override void parentmethod() { } // 조상 메서드의 이름을 잘못 적음. }
- 오버라이딩을 올바르게 했는지를 컴파일러가 확인한다.
- @Deprecated
- 사용을 권장하지 않는 필드나 메서드에 붙인다.
@Deprecated public int getDate() { return normlize().getDayOfMonth(); }
- javac -Xlint:deprecation Test.java 실행 시 Deprecated 경고를 표시해줌
- 사용을 권장하지 않는 필드나 메서드에 붙인다.
- @FunctionalInterface
- 함수형 인터페이스로 하나의 추상 메서드만 가져야 하는지 컴파일러가 확인
@FunctionalInterface public interface Runable { public abstract void run(); // 한개만 있어야 됨 // public abstract void test(); // 주석을 없애면 컴파일 에러 }
- @SuppressWarnings
- 컴파일러 경고 메시지를 나타내지 않도록 억제
@SuppressWarnings("uncheced") // 제네릭과 관련 된 경고 억제 ArrayList list = new ArrayList(); // 제네릭 타입 지정 안함을 프로그래머가 인지했음 list.add(obj);
메타 애너테이션
- 애너테이션을 위한 애너테이션
- @Target : 애너테이션을 정의 할 때 적용 대상 지정에 사용
@Target({ TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface TestAnnotation {}
@TestAnnotation
class Test {
@TestAnnotation
int t;
@TestAnnotation
public void t() { }
}
- @Retention : 애너테이션이 유지되는 기간을 지정하는데 사용
@Retention(RetentionPlicy.RUNTIME) // 런타임까지
@Target(ElementType.METHOD)
public @interface TestAnnotation { }
- @Documented : javadoc으로 작성한 문서에 포함시키면 @Docuemnted를 붙인다.
- @Inherited : 애너테이션을 자손 클래스에 상속하고자 할 때 상용한다.
@Inherited
@interface SuperAnno {}
@SuperAnno
class parent {}
class Child extends Parent {}
- @Repeatable : 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@interface ToDos {
ToDo[] value();
}
@Repeatable(ToDos.class)
@interface ToDo {
Strign value();
}
@Todo("delete test codes.")
@Todo("override inherited methods")
class Myclass {
}
애너테이션 타입 정의
interface에 @를 붙여 애너테이션 이름을 명명 : @Interface
애너테이션 메서드는 추상 메서드이다.
@interface TestAnnotation {
int count();
String testedBy();
TestType testType();
DateTime testDate();
}
@TestAnnotation(
count=3, testedBy="Kim", testType=TestType.TEST, testDate=@DateTime(yymmdd="211231", hhmmss="235959"
)
- 애너테이션 타입 정의와 사용방법
@interface TestInfo {
int count() default 1;
}
@TestInfo // @TestInf(count=1)과 동일
public class NewClass { }
- 기본 값을 지정 가능
@interface TestInfo {
String value();
}
@TestInfo("passed") // @TestInfo(value="passed")와 동일
public class NewClass { }
- 요소가 하나이고 이름이 value일 때는 요소의 이름 생략 가능
@interface TestInfo {
String[] testTools();
}
- 요소의 타입이 배열인 경우, 괄호{}를 사용해야 한다.
모든 애너테이션의 조상
- java.lang.annotation.Annotation은 모든 애너테이션의 조상이지만 상속이 안되는 인터페이스이다.
public interface Annotation { .
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType(); // 애너테이션의 타입을 반환
마커 애너테이션
- 요소가 하나도 정의되지 않은 애너테이션
@Target(ElementType.METHOD)
@Retention(RetentionPlicy.SOURCE)
public @interface Test {} // 마커 애너테이션. 정의된 요소가 없음
@Test // 마커 애너테이션
public void method() { }
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용
- 괄호()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[java-기초-11-02] 기본 API 클래스 (2) | 2021.01.13 |
---|---|
[java-기초-11-01] 기본 API 클래스 (4) | 2021.01.12 |
[java-기초-10] 예외 처리 (0) | 2021.01.08 |
[java-기초-09] 중첩 클래스와 중첩 인터페이스 (0) | 2021.01.07 |
[java-기초-08] 인터페이스 (0) | 2021.01.06 |