2021.06.28 - [Study/Java Study] - 자바스터디 8주차 (1)
자바스터디 8주차 (1)
2021.06.23 - [Study/Java Study] - 자바스터디 7주차 (2) 자바스터디 7주차 (2) 2021.06.22 - [Study/Java Study] - 자바스터디 7주차 (1) 자바스터디 7주차 (1) 2021.06.19 - [Study/Java Study] - 자바스터디 6..
hong-chii.tistory.com
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 |
댓글