2021.06.28 - [Study/Java Study] - 자바스터디 8주차 (1)
3. 애너테이션
3.1 애너테이션이란?
프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애너테이션이다.
애너테이션을 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다.
예를 들어 '@Test'라는 에너테이션을 메서드 앞에 붙이면 이 메서드를 테스트해야한다는 것을 테스트 프로그램에 알리는 역할을 할 뿐, 메서드가 포함된 프로그램 자체에는 아무런 영향을 미치지 않는다.
3.2 표준 애너테이션
@Override
메서드 앞에만 붙일 수 있는 애너테이션으로, 조상의 메서드를 오버라이딩하는 것이라는 걸 컴파일러에게 알려주는 역할을 한다.
@Deprecated
더 이상 사용되지 않는 필드나 메서드에 붙이면, 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않을 것을 권한다는 의미이다.
@FunctionalInterface
함수형 인터페이스를 선언할 때, 이 애너테이션을 붙이면 컴파일러가 올바르게 선언했는지 확인하고, 잘못된 경우 에러를 발생시킨다.
@SuppressWarnings
컴파일러가 보여주는 경고메시지가 나타나지 않게 억제해준다.
@SafeVarargs
이 애너테이션은 static이나 final이 붙은 메서드와 생성자에만 붙일 수 있다. 즉, 오버라이드될 수 있는 메서드에는 사용할 수 없다는 뜻이다. 경고를 억제하기 위해 사용한다.
3.3 메타 애너테이션
메타 애너테이션은 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때 애너테이션의 적용대상(target)이나 유지기간(retention)등을 지정하는데 사용된다.
@Target
애너테이션이 적용가능한 대상을 지정하는데 사용된다.
@Target으로 지정할 수 있는 애너테이션 적용대상의 종류
대상타입 | 의미 |
ANNOTATION_TYPE | 애너테이션 |
CONSTRUTOR | 생성자 |
FIELD | 필드(멤버변수, enum상수) |
LOCAL_VARIABLE | 지역변수 |
METHOD | 메서드 |
PACKAGE | 패키지 |
PARAMETER | 매개변수 |
TYPE | 타입(클래스, 인터페이스, enum) |
TYPE_PARAMETER | 타입 매개변수(JDK1.8) |
TYPE_USE | 타입이 사용되는 모든 곳(JDK1.8) |
@Retention
애너테이션이 유지되는 기간을 지정하는데 사용된다.
유지정책 | 의미 |
SOURCE | 소스 파일에만 존재. 클래스파일에는 존재하지 않음. |
CLASS | 클래스 파일에 존재. 실행시에 사용불가. 기본값 |
RUNTIME | 클래스 파일에 존재. 실행시에 사용가능. |
@Documented
애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 한다.
@Inherited
애너테이션이 자손 클래스에 상속되도록 한다.
@Repeatable
@Repeatable이 붙은 애너테이션은 여러 번 붙일 수 있다.
@Native
네이티브 메서드에 의해 참조되는 '상수 필드'에 붙이는 애너테이션이다.
3.4 애너테이션 타입 정의하기
@interface 애너테이션이름 {
타입 요소이름(); // 애너테이션의 요소를 선언한다.
...
}
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용된다.
- ()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
자바의 정석을 토대로 공부 후 정리한 내용입니다.
'Study > Java Study' 카테고리의 다른 글
자바스터디 10주차 (1) (0) | 2021.07.12 |
---|---|
자바스터디 9주차 (1) (0) | 2021.07.05 |
자바스터디 8주차 (1) (0) | 2021.06.28 |
자바스터디 7주차 (2) (0) | 2021.06.23 |
자바스터디 7주차 (1) (0) | 2021.06.22 |
댓글