728x90
15.1 간단한 어노테이션 예제
- 어노테이션 타입은 자동 처리를 위해 도구들이 지켜야 하는 표준화되고 구조화된 방법으로 정보를 표현한다.
- 원하는 정보를 모두 담을 수 있는 어노테이션 타입을 다음처럼 정의할 수 있다.
@interface ClassInfo{
String created();
String createdBy();
String lastModified();
String lastModifiedBy();
int revision();
}
- 어노테이션 타입은 특수한 종류의 인터페이스로 @ 문자로 시작하고 그 뒤에 interface키워드가 따라 나온다. 어노테이션은 클래스나 필드 선언과 같은 프로그램 요소에 적용할 수 있다.
- 어노테이션은 수정자이며 수정자를 허용할 수 있는 곳이라면 어디에든 선언 가능.
- 어노테이션은 @ 문자와 어노테이션 타입의 이름으로 구성된다.
15.2 어노테이션 타입
- 어노테이션 타입은 특별한 종류의 인터페이스로 interface 앞에 @ 문자를 붙여 선언할 수 있다. 어노테이션 타입은 인터페이스를 선언할 수 있는 곳이라면 어느 곳이든 즉 최상위 어노테이션 타입이나 다른 타입 내에 중첩해 선언할 수 있으며 인터페이스에 적용할 수 있는 제한자를 동일하게 적용할 수 있다.
- 어노테이션 타입으로 선언된 메소드는 어노테이션 타입의 요소라고 한다. 이 요소들은 다음과 같은 규칙을 엄격히 지켜야 한다.
- 요소 타입은 기본타입, String, enum, 또 다른 어노테이션 타입, Class, 이 타입들의 배열들만이 될 수 있다.
- 요소를 매개변수를 선언할 수 없다.
- 요소는 throws를 던질 수 없다.
- 요소는 제네릭 못 사용.
- 요소의 기본 값은 빈 매개변수 리스트 뒤에 default 키워드와 적당한 값을 주는 것으로 설정할 수 있다.
- 어노테이션 타입은 요소를 한 개도 가지지 않을 수 있으며 이러한 타입을 마커 어노테이션이라고 한다.
- 어노테이션 타입은 다른 인터페이스를 명시적으로 확장할 수는 없지만 묵시적으로 Annotation인터페이스를 확장하고 있다. 어노테이션 타입은 제네릭 타입이 될 수 없다. 마지막으로 어노테이션 타입은 직간접적으로 자신의 타입 요소를 가질 수 없다.
15.3 어노테이션 요소
- 어노테이트할 수 있는 프로그램 요소는 제한자를 지정할 수 있는 모든 것들이 될 수 있다. 그래서 타입 선언, 필드 선언, 메소드와 생성자 선언, 지역 변수 선언, 매개변수 선언이 모두 가능하다.
- 이미 본 것처럼 요소를 어노테이트하기 위해서는 적용할 어노테이션 타입 이름 앞에 @ 를 붙여 제공하고 그 뒤에 어노테이션 타입의 요소를 위한 초기자 리스트를 괄호로 감싸서 제공해야 한다. 주어진 프로그램 요소는 어노테이션 타입 당 한 번만 어노테이트 될 수 있다.
15.4 어노테이션 적용성 제한하기
- 어노테이션은 제한자가 허용되는 곳이라면 어디든 선언할 수 있다.
- 어노테이션 타입이 @Target 메타 어노테이션을 가지지 않았다면 이 타입은 어디에든 적용할 수 있다.
15.5 보유 정책
- 어노테이션 타입과 관련된 모든 것들은 어노테이션을 접근할 수 있는 시기를 결정하는 보유 정책을 가지고 있다. 보유 정책은 enum타입 RetentionPolicy에 정의되어 있으며, Retention 메타 어노테이션의 사용을 제어한다. 보유 정책에는 세 가지 값이 있다.
- SOURCE - 어노테이션은 소스 파일에만 존재하며 컴파일러가 클래스 파일을 생성할 때 제거한다.
- CLASS - 어노테이션을 클래스 파일에 보관한다. 하지만 런타임 시에는 사용 불가.
- RUNTIME - 어노테이션을 클래스 파일에 보관하며 런타임 시에 리플렉션 메커니즘을 통해 사용 가능.
- 기본 보유 정책은 CLASS이다.
15.6 어노테이션으로 작업하기
- 없음
728x90
'도서 > 자바 프로그래밍 언어 - James Gosling' 카테고리의 다른 글
[자바 프로그래밍 언어] 17장 가비지 컬렉션과 메모리 (0) | 2022.01.06 |
---|---|
[자바 프로그래밍 언어] 16장 리플렉션 (0) | 2022.01.05 |
[자바 프로그래밍 언어] 14장 스레드 (0) | 2022.01.03 |
[자바 프로그래밍 언어] 13장 문자열과 정규 표현식 (0) | 2022.01.02 |
[자바 프로그래밍 언어] 12장 예외와 검증 (0) | 2021.12.31 |
댓글