JAVA/자바의 정석

[자바의 정석 - 기초편] 12. (4) 애너테이션 ( 표준 / 메타 / 타입 / 요소 / 규칙 )

서영22 2023. 12. 14. 23:22

 애너테이션 

주석처럼 프로그래밍 언어에 영향을 미치지 않으며 유용한 정보를 제공

 

 

 

 

Java에서 제공하는 애너테이션

 

 

 

 

 표준 애너테이션 

@Override

 

- 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함

 

- 오버라이딩 할 때 메서드 이름 잘못 적는 실수를 하는 경우가 많음 ➔ 메서드 앞에 @Override 붙이기

 

 

 

 

@Deprecated

 

- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙임

 

 

 

 

 

@FunctionalInterface

 

- 함수형 인터페이스에 붙이면 컴파일러가 올바르게 작성했는지 체크

   ( 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있음 )\

 

 

 

 

@SuppressWarnings

 

- 컴파일러의 경고메시지가 나타나지 않게 억제함

 

- 괄호 안에 억제하고자하는 경고의 종류를 문자열로 지정

 

 

 

- 둘 이상의 경고를 동시에 억제하려면 열거형으로 작성

 

 

 

- '-Xlint' 옵션으로 컴파일하면 경고메시지를 확인할 수 있음 ( 괄호 안: 경고의 종류 )

 

 

 

 

 메타 애너테이션 

: 애너테이션을 위한 애너테이션

 

- java.lang.annotation 패키지에 포함

 

 

 

 

@Target

 

애너테이션을 정의할 때 적용대상 지정에 사용

 

 

 

@Retention

 

애너테이션이 유지되는 기간을 지정하는데 사용

 

 

 

 

- 컴파일러에 의해 사용되는 애너테이션의 유지정책 : SOURCE

 

 

 

 

- 실행시에 사용가능한 애너테이션의 유지정책 : RUNTIME

 

 

 


@Documented, @Inherited (이런게 있다~ 정도)

 

- javadoc으로 작성한 문서에 포함시키려면 @Documeted

 

- 애너테이션 자손 클래스에 상속하고자 할 때 @Inherited

 

 

 

@Repeatable (이런게 있다~ 정도)

 

- 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용

 

 

 

 

- @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있음

 

 

 

 

- @Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함

 

 

 

 

 애너테이션 타입 정의하기 

- 애너테이션을 직접 만들어 쓸 수 있음

 

 

 

 

- 애너테이션의 메서드는 추상메서드이며 애너테이션을 적용할 떄 지정 (순서 상관 X)

 

 

 

 애너테이션 요소 

- 적용시 값을 지정하지 않으면 사용될 수 있는 기본값 지정 가능 (null 제외)

 

 

 

 

- 요소가 하나이고 이름이 value일 때는 요소의 이름 생략 가능

 

 

 

 

- 요소의 타입이 배열인 경우, 괄호{ }를 사용해야 함

 

 

 

 

 모든 애너테이션의 조상 

- Annotation은 모든 애너테이션의 조상이지만 상속은 불가

 

- 사실 Annotation은 인터페이스임

 

 

 

 마커 애너테이션 (Marker Annotation) 

요소가 하나도 정의되지 않은 애너테이션

 

 

 

 

 

 애너테이션 요소의 규칙 

애너테이션의 요소를 선언할 때 지켜야 할 규칙

 

1. 요소의 타입 : 기본형 / String / enum / 애너테이션 / Class 만 허용

 

2. 추상메서드의 괄호() 안에 매개변수 선언 X

 

3. 예외 선언 X

 

4. 요소를 타입 매개변수로 정의 X

 

 

 

 

< 예제 >