자바의 정석을 통해 공부한 내용을 요약하였습니다
@Test // 이 메서드가 테스트 대상임을 테스트 프로그램에게 알림
public void method() {
....
}
class Parent {
void parentMethod() { }
}
class Child extends Parent {
@Override
void parentmethod() { } // 조상 메서드의 이름을 잘못적었음. 에러 발생
}
@Deprecated
int oldField;
@Deprecated
int getOldField() {
return oldField;
}
@FunctionalInterface
public interface Runnable {
void run(); // 추상 메서드
}
@SuppressWarnings("unchecked") // 지네릭스 관련 경고를 억제
ArrayList<NewClass2> list = new ArrayList(); // 타입을 지정하지 않음.
list.add(nc);
주로 사용되는 경고 메시지
- deprecation : @Deprecated가 붙은 대상을 사용해서 발생하는 경고
- unchecked : 지네릭스로 타입을 지정하지 않았을 때 발생하는 경고
- rawtypes : 지네릭스를 사용하지 않아서 발생하는 경고
- varargs : 가변인자의 타입이 지네릭 타입일 때 발생하는 경고
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@interface DateTime {
String yymmdd();
String hhmmss();
}
@interface ToDos { // 여러 개의 ToDo애너테이션을 담을 컨테이너 애너테이션
ToDo[] value(); // ToDo 애너테이션 배열타입의 요소를 선언, 이름은 반드시 value여야 함
}
@interface 애너테이션이름 {
타입 요소이름();
....
}
@interface TestInfo {
int count() default 1; // 기본 값을 가질 수 있다.
String testedBy();
String[] testTools() default "JUnit";
TestType testType() default TestType.FIRST;
DateTime testDate();
}
@interface DateTime {
String yymmdd();
String hhmmss();
}
@TestInfo(testedBy="aaa", testDate=@DateTime(yymmdd="160101", hhmmss="235959"))
public interface Annotation { // Annotation 자신은 인터페이스이다.
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType(); // 애너테이션 타입 반환
}
public @interface Override {}
public @interface Test {}
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용
- ()안에 매개변수를 선언할 수 없음
- 예외를 선언할 수 없음
- 요소를 타입 매개변수로 정의할 수 없음
@interface AnnoTest {
int id = 100; // OK
String major(int i, int j); // 에러, 매개변수 선언 불가능
String minor() throws Exception; // 에러, 예외 선언 불가능
ArrayList<T> list(); // 에러, 요소의 타입에 타입 매개변수 사용 불가능
}