📌 애너테이션이란
애너테이션
- 문서 설정하는 XML파일을 코드 파일 안에 애너테이션으로 넣어서 구현해서 관리를 용이하게 함
애너테이션 타입 정의 방법
@interface 애너테이션이름 {
타입 요소이름(); // 애너테이션의 요소 선언
}
@interface TestInfo {
int count() decault 1;
String[] testTools();
}
@TestInfo(count=1, testTools={"aaa", "bbb"})
class NewClass{}
- @ 안붙이면 인터페이스로 선언됨
- 애너테이션의 메서드는 추상메서드이며, 애너테이션 적용 시 요소의 값 모두 지정해야 함(순서 상관 없음)
애너테이션 요소의 기본값
- 적용시 값 지정하지 않으면 사용할 기본값 지정 가능(null 제외)
- 요소의 이름 value인 경우 생략 가능
ex) @TestInfo(value=1) = @TestInfo(1)
- 요소의 타입이 배열인 경우, 괄호{} 사용해야 함
ex) 값이 없을 경우 @TestInfo(count=1, testTools={}) 이렇게 빈 괄호 작성해야 함
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용됨
- 괄호()안에 매개변수 선언 불가
- 예외 선언 불가
- 요소를 타입 매개변수로(<T>) 정의 불가
마커 애너테이션
- 요소가 하나도 정의되지 않은 애너테이션
ex) @Test, @Deprecated
📌 표준 애너테이션
- 자바에서 제공하는 애너테이션
@FunctionalInterface : 함수형 인터페이스에 붙여 컴파일러가 추상 메서드 1개인지 체크
@SuppressWarnings : 컴파일러의 경고메시지가 나타나지 않게 억제 함
=> 이 경고는 내가 확인했음을 말해주는 의미로 사용함
메타 애너테이션
- 애너테이션을 위한 애너테이션
- 애너테이션을 정의할 때, 적용대상이나 유지기간의 지정에 사용
@Target : 애너테이션을 적용할 수 있는 대상 지정에 사용
@Retention : 애너테이션이 유지되는 기간을 지정하는데 사용
- 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE
ex) @Override : 실행할때는 필요 없고 컴파일때만 사용하면 되기 때문
- 실행시에 사용 가능한 애너테이션의 유지 정책은 RUNTIME
@Documented : javadoc으로 작성한 문서에 포함시키기 위해 사용
📌 애너테이션 프로세서
- 어노테이션을 프로세싱 하는 기술
- 소스코드 레벨에서 소스코드에 붙어있는 애너테이션 정보를 읽어와 컴파일러가 컴파일 중에
새로운 소스코드를 생성하거나 기존의 코드를 변경하게하는 것
ex) 롬복(@Getter, @Setter)
애너테이션 프로세서 장단점
- 장점 : 컴파일 시점에 조작하기 때문에 런타임 비용 제로
- 단점 : 기존의 코드를 고치는 방법은 현재로써는 public 한 API 가 없음
[참고]
- 자바의정석
'스터디 > 2209_자바의정석' 카테고리의 다른 글
13주차 과제 : I/O (0) | 2022.11.04 |
---|---|
11주차 과제 : Enum (0) | 2022.10.18 |
10주차 과제 : 멀티쓰레드 프로그래밍 (0) | 2022.10.18 |
8주차 과제 : 인터페이스 (0) | 2022.10.11 |
7주차 과제 : 패키지 (0) | 2022.10.06 |
댓글