주석은 소스 코드를 읽는 '사람'에게 정보를 제공하는 반면, 애너테이션은 특정 코드를 사용하는 '프로그램'에게 정보를 전달한다
학습 목표
- 애너테이션의 개념을 이해하고 설명할 수 있다.
애너테이션의 주요한 역할-
1.컴파일러에게 문법 에러를 체크하도록 정보를 제공.
2.프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공.
3.런타임에 특정 기능을 실행하도록 정보를 제공.
애너테이션의 종류-
- 표준 애너테이션과 메타 애너테이션이 어떤 차이가 있고, 어떤 내용이 있는 지 이해할 수 있다.
표준 애너테이션-
@Override : 상위 클래스의 메서드를 오버라이딩 하는 메서드라는 것을 컴파일러에게 알려주는 역할 만약 상위 클래스(또는 인터페이스)에서 @Override가 붙어있는 메서드명과 동일한 이름의 메서드를 찾을 수 없다면 컴파일러가 컴파일에러를 발생시킨다.
@Override 애너테이션은 컴파일러에게 "이 메서드는 상위클래스의 메서드를 오버라이딩하는 메서드이니, 실수해서 오버라이딩이 잘 안되면 에러를 발생시켜서 나한테 알려줄래?"라고 부탁하는것과 같다.
@Deprecated : JDK가 소개되어 더이상 사용하지않는 필드나 메서드가 있는 경우 애너테이션이 붙은 대상이 >새로운 것으로 대체되었으니 기존것을 사용하지 않을것을 권장< 하는데 사용, 즉 기존 메서드를 하위 버전 호환성 문제로 삭제하기 곤란해 남겨두어야하지만 더이상 사용하는것을 권장하지 않을때 사용
@FunctionalInterface : 함수형 인터페이스를 선언할 때, 컴파일러가 함수형 인터페이스의 선언이 바르게 선언 되었는지 확인하는애너테이션 (코드작성시 실수방지용) 만약 바르게 선언되지 않은경우 에러를 발생시킨다. 참고로 함수형 인터페이스는 단 하나의 추상메서드만을 가져야하는 제약이있다.
@SuppressWarning : 컴파일 경고 메시지가 나타나지 않도록한다.
아래와 같이 @SuppressWarnings 뒤에 괄호를 붙이고 그 안에 억제하고자 하는 경고메세지를 지정해줄 수 있습니다.
애너테이션설명
@SuppressWarings(”all”) | 모든 경고를 억제 |
@SuppressWarings(”deprecation”) | Deprecated 메서드를 사용한 경우 나오는 경고 억제 |
@SuppressWarings(”fallthrough”) | switch문에서 break 구문이 없을 때 경고 억제 |
@SuppressWarings(”finally”) | finally 관련 경고 억제 |
@SuppressWarings(”null”) | null 관련 경고 억제 |
@SuppressWarings(”unchecked”) | 검증되지 않은 연산자 관련 경고 억제 |
@SuppressWarings(”unused”) | 사용하지 않는 코드 관련 경고 억제 |
메타 애너테이션-
애너테이션을 위한 애너테이션으로, 애너테이션의 적용대상 또는 유지기간을 정하는 등 애너테이션을 정의하는데 사용된다.
@Target : 애너테이션을 적용할 "대상"을 지정하는데 사용된다.
@Documented : 애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 하는 애너테이션 설정이다.
자바에서 제공하는 표준 애너테이션과 메타애너테이션중 override와 superessWarnings를 제외하고는 모두 Documented가 적용되어있습니다.
@Inherited : 하위클래스가 애너테이션을 상속받도록합니다. 애너테이션을 상위클래스에 붙이면 하위클래스도 상위 클래스에 붙은 애너테이션들이 동일하게 적용된다.
@Retention : 특정 애너테이션의 지속시간을 결정하는데 사용됨 애너테이션과 관련한 유지정책의 종류엔 3가지가있다
유지정책이란 애너테이션이 유지되는 기간을 지정하는 속성이다.
유지 정책 설명
SOURCE | 소스 파일에 존재, 클래스파일에는 존재하지 않음 |
CLASS | 클래스 파일에 존재, 실행시에 사용불가, 기본값 |
RUNTIME | 클래스 파일에 존재, 실행시에 사용가능 |
@Repratable : 애너테이션을 여러번 붙일수 있도록 허용한다는 의미의 애너테이션
사용자 정의 애너테이션
사용자가 직접 애너테이션을 정의해서 사용하는것을 의미한다. 애너테이션은 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다.
'TIL' 카테고리의 다른 글
[Java]스트림(Stream) (0) | 2022.09.15 |
---|---|
[Java]람다식(Lambda Expression) (0) | 2022.09.15 |
[Java] 다형성(Polymorphism) (0) | 2022.09.14 |
[네트워크][HTTP]에러코드 (0) | 2022.09.14 |
[Java]컬렉션 (0) | 2022.09.14 |