Annotaion
애너테이션 (Annotation)
- 다른 프로그램에게 유용한 정보를 제공하는 역할
- 다른 프로그램들에게는 아무 영향을 주지 않는다애너테이션 주요 역할
- 컴파일러에게 문법에러를 체크하도록 정보 제공
- 프로그램 빌드 시 코드를 자동으로 생성할 수 있도록 정보 제공
- 런타임 시 특정 기능을 실행하도록 정보 제공표준 애너테이션 : 자바에서 기본적으로 제공하는 애너테이션
표준 애너테이션 | 설명 |
---|---|
@Override | 컴파일러에게 메서드를 오버라이딩한다고 알림 |
@Deprecated | 이제 사용하지 않을 대상을 알림 |
@FunctionalInterface | 함수형 인터페이스라고 알림 |
@SuppressWarning | 경고메세지 생략 |
@Override
- 메서드 앞에만 붙일 수 있는 애너테이션
- 상위 클래스의 메서드를 오버라이딩하는 메서드임을 알리는 역할
- 오타 발생시 에러 방지@Deprecated
- 더 이상 사용하지 않는 필드, 메서드가 있는 경우 새로운 것으로 대체되었으니 기존의 것을 사용하지 않음을 알림
@SuppressWarnings
- 컴파일 경고 메세지가 나타나지 않도록 해줌
- 경고가 발생할걸 알면서도 묵인해야하는 경우 사용
애너테이션 | 설명 |
---|---|
@SuppressWarnings(“all”) | 모든 경고 억제 |
@SuppressWarnings(“deprecation”) | Deprecated 메서드 사용 시 나오는 경고 억제 |
@SuppressWarnings(“fallthrough”) | switch문에서 break 구문이 없을때 경고 억제 |
@SuppressWarnings(“finally”) | finally 관련 경고 억제 |
@SuppressWarnings(“null”) | null 관련 경고 억제 |
@SuppressWarnings(“unchecked”) | 검증되지않은 연산자 관련 경고 억제 |
@SuppressWarnings(“unused”) | 사용하지않는 코드 관련 경고 억제 |
@FunctionalInterface
- 함수형 인터페이스 선언 시, 함수형 인터페이스가 바르게 선언되었는지 확인
- 코드 작성 과정 중 실수 방지 위한 확인용 애너테이션메타 애너테이션(meta-annotation)
- 애너테이션을 위한 애너테이션
- 애너테이션 적용대상, 유지기간 등을 정하는데 사용
메타 애너테이션 | 설명 |
---|---|
@Target | 애너테이션을 적용할 타겟 지정 |
@Documented | 애너테이션 정보를 javadoc로 작성된 문서에 포함 |
@Inherited | 애너테이션이 하위클래스에 상속되도록 |
@Retention | 애너테이션이 유지기간을 정하는데 사용 |
@Repeatable | 애너테이션을 반복 적용 가능하게 함 |
메타 애너테이션
@Target
- 애너테이션을 적용할 적용 대상 지정 시 사용@Documented
- 애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 하는 애너테이션 설정@Inherited
- 하위클래스가 애너테이션을 상속받도록 함@Rentention
- 애너테이션의 지속시간 결정
유지 정책 | 설명 |
---|---|
SOURCE | 소스파일에 존재, 클래스파일에는 존재X |
CLASS | 클래스파일에 존재, 실행 시 사용불가, 기본값 |
RUNTIME | 클래스 파일에 존재, 실행 시 사용 가능 |
@Repeatable
1
2
3
@interface 애너테이션명 {
타입_요소명(); // 애너테이션 요소 선언
}
- 애너테이션을 여러번 붙일 수 있도록 허용
사용자 정의 애너테이션
- 사용자가 직접 애너테이션을 정의하여 사용하는 것
- 인터페이스를 정의하는 방법과 비슷
- 애너테이션은 java.lang.annotation을 상속받기 때문에 다른 클래스나 인터페이스를 상속받을 수 없음