본문 바로가기

TIL

[Java]애너테이션(Annotation)

728x90

주석은 소스 코드를 읽는 '사람'에게 정보를 제공하는 반면, 애너테이션은 특정 코드를 사용하는 '프로그램'에게 정보를 전달한다

 

학습 목표

  • 애너테이션의 개념을 이해하고 설명할 수 있다.

애너테이션의 주요한 역할-

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 : 애너테이션을 여러번 붙일수 있도록 허용한다는 의미의 애너테이션

 

사용자 정의 애너테이션

사용자가 직접 애너테이션을 정의해서 사용하는것을 의미한다. 애너테이션은 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다.

 

 

728x90

'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