애너테이션
주석처럼 프로그래밍 언어에 영향을 미치지 않으면서, 유용한 정보를 제공
소스 변경에 따른 관련 문서의 불일치 발생가 종종 발생하였다. 그래서 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하다는 것이 낫다고 생각하여 애너테이션이 등장하였다.
/** ~ */는 javadoc.exe를 위한 주석이다. javadoc.exe는 소스코드의 주석으로부터 HTML문서를 생성해 낸다.
애너테이션의 사용 예(JUnit에 정보를 제공하기 위한 애너테이션)
표준 애너테이션
Java에서 제공하는 애너테이션이다.
아리 5개는 메타애너테이션으로 애너테이션을 만들 때 사용한다.
@Override
오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.
오버라이딩할 때 메서드이름을 잘못 적는 실수를 하는 경우가 많다.
오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이자
@Deprecated
앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
Java는 하위호환성을 중요시 여기기 때문에 코드를 지우지 않고 그대로 둔다.
사용 예(Date클래스의 getDate())
@Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 나타나는 메시지
@FunctionalInterface
- 함수형 인터페이스에 붙이면 컴파일러가 올바르게 작성했는지 체크
- 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있음
@SuppressWarnings
- 컴파일러의 경고메시지가 나타나지 않게 억제한다.
- 괄호 안에 억제하고자 하는 경고의 종류를 문자열로 지정
둘 이상의 경고를 동시에 억제하려면 아래와 같이 한다.
메타 애너테이션
- 애너테이션을 위한 애너테이션이다.
- java.lang.annotation 패키지에 포함
@Target
애너테이션을 정의할 때, 적용대상 지정에 사용
@Retention
애너테이션이 유지(retention)되는 기간을 지정하는 데 사용
컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE이다.
실행 시에 사용 가능한 애너테이션의 정책은 RUNTIME이다.
@Documented, @Inherited
javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.
애너테이션을 자손 클래스에 상속하고자 할 때, @Inherited를 붙인다.
@Repeatable
반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함
애너테이션 타입 정의하기
애너테이션을 직접 만들어 쓸 수 있다.
애너테이션의 메서드는 추상메서드이며, 애너테이션을 적용할 때 지정(순서는 상관없음)
애너테이션의 요소
적용 시 값을 지정하지 않으면, 사용될 수 있는 기본값 지정 가능(null제외)
요소가 하나이고 이름이 value일 때는 요소의 이름 생략가능
요소의 타입이 배열인 경우, 중괄호{}를 사용해야 한다.
모든 애너테이션의 조상
java.lang.annotation.Annotation
Annotation은 모든 애너테이션의 조상이지만 상속은 불가하다.
Annotation은 인터페이스이다.
마커 애너테이션 (Marker Annotation)
요소가 하나도 정의되지 않은 애너테이션
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용된다.
- () 안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
'JAVA' 카테고리의 다른 글
[지네릭스] 열거형 (0) | 2023.03.15 |
---|---|
[지네릭스] 지네릭스 (0) | 2023.03.15 |
스트림(Stream) (0) | 2023.03.14 |
람다(Lambda) (0) | 2023.03.13 |
[java.math] BigInteger, BigDecimal (0) | 2023.03.09 |