728x90
3.1 애너테이션이란?
프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 애너테이션은 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공할 수 있다는 장점이 있다.
'@'을 붙여서 사용한다.
미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe라는 프로그램이 이 정보를 읽어서 문서를 작성하는데 사용한다.
3.2 표준 애너테이션
애너테이션 | 설명 |
@Override | 컴파일러에게 오버라이딩하는 메서드라는 것을 알린다. |
@Deprecated | 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다. |
@SuppressWarnings | 컴파일러의 특정 경고메시지가 나타나지 않게 해준다. |
@SafeVarargs | 지네릭스 타입의 가변인자에 사용한다.(JDK1.7) |
@Functionallnterface | 함수형 인터페이스라는 것을 알린다.(JDK1.8) |
@Native | native메서드에서 참조되는 상수 앞에 붙인다.(JDK1.8) |
3.3 메타 에너테이션
메타 애너테이션은 '애너테이션을 위한 애너테이션', 즉 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때 애너테이션의 적용 대상이나 유지기간 등을 지정하는데 사용된다.
*메타 애너테이션은 'java.lang.annotation'패키지에 포함되어 있다.
애너테이션 | 설명 |
@Target | 애너테이션이 적용가능한 대상을 지정하는데 사용한다. |
@Documented | 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다. |
@Ingerited | 애너테이션이 자손 클래스에 상속되도록 한다. |
@Retention | 애너테이션이 유지되는 범위를 지정하는데 사용한다. |
@Repeatable | 애너테이션을 반복해서 적용할 수 있게 한다.(JDK1.8) |
3.4 애너테이션 타입 정의하기
새로운 애너테이션을 정의하는 방법은 아래와 같다. '@'기호를 붙이는 것을 제외하면 인터페이스를 정의하는 것과 동일한다.
@interface 애너테이션이름 {
타입 요소이름(); //애너테이션의 요소를 선언한다.
...
}
엄밀히 말해서 '@Override'는 애너테이션이고 'Override'는 '애너테이션의 타입'이다.
애너테이션의 요소
애너테이션 내에 선언된 메서드를 '애너테이션 요소'라고 한다.
애너테이션 요소는 반환값이 있고 매개변수는 없는 추상 메서드의 형태를 가지며, 상속을 통해 구현하지 않아도 된다.
java.lang.annotation.Annotation
모든 애너테이션의 조상은 Annotation이다.
마커 애너테이션 Marker Annotation
요소가 하나도 정의되지 않은 애너테이션을 마커 애너테이션이라고 한다.
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용된다.
- ()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
출처 : 남궁성. 「자바의 정석」. 도우출판. 2016
728x90
'프로그래밍언어 > Java' 카테고리의 다른 글
[자바의 정석] 14. 람다식 (2) | 2023.12.30 |
---|---|
[자바의 정석] 12. 열거형(enums) (0) | 2023.09.29 |
[자바의 정석] 12. 지네릭스 (0) | 2023.09.28 |
[자바의 정석] 11. 컬렉션 프레임웍 - Properties / Collection (0) | 2023.08.07 |
[자바의 정석] 11. 컬렉션 프레임웍 - HashMap과 Hashtable / TreeMap (0) | 2023.08.07 |