본문 바로가기
IT 정보/Java

[Java] 애너테이션 ( Annotation )

by 동그리가조아 2022. 5. 19.
반응형

애너테이션이란!? 

프로그램에게 정보를 제공하는 주석이다. (프로그래밍 언어에 영향을 미치지 않음)

  • 컴파일러에게 문법 에러를 체크하도록 요청
  • 프로그램 작성 시 코드를 자동 생성하도록 정보 제공
  • 런타임에 특정 기능을 실행하도록 정보 제공
  • 표준 애너테이션 / 메타 에너테이션 / 사용자 정의 애너테이션

 


표준 애너테이션

기본으로 제공하는 애너테이션

@Override 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림
@Deprecated 앞으로 사용하지 않을 대상을 알릴 때 사용
@FunctionalInterface 함수형 인터페이스라는 것을 알
@SuppressWarning 컴파일러가 경고메세지를 나타내지 않음

 

@Orverride

메서드 앞에만 붙을 수 있는 애너테이션으로, 선언한 메서드가 상위 클래스의 메서드를 오버라이드 하고 있는 메서드라는 것을 컴파일러에게 제공 ( 동일한 상위 메서드가 없다면 error 발생 )

 

@Deprecated

버전 업그레이드 등등 이유로 인해 사용하지 않거나 권장하지 않는 필드나 메서드에 사용하지 않는 것을 표시
버전 호환성 문제로 삭제할 수 없을 때 사용 미 권장 에너테이션 

 

@SuppressWarnings

선언한 곳의 컴파일 경고를 무시하는 애너테이션
@SuppressWarnings(" ") 괄호 안에 무시하고자 하는 경고 메시지를 지정할 수 있다.

ex) all / deprecation / finally / null / unused / unchecked 등등

 

@FunctionalInterface

함수형 인터페이스를 선언할 때 확인해준다. (실수 방지)
함수형 인터페이스는 하나의 추상 메서드만 있어야 하는데 2개일 경우 에러를 발생시켜준다.


메타 애너테이션

애너테이션을 정의하는 데 사용 (적용 범위 or 유지 기간)

@Target 애너테이션을 정의할 때 적용 대상을 지정하는데 사용한다.
@Documented 애너테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.
@Inherited 애너테이션이 하위 클래스에 상속되도록 한다.
@Retention 애너테이션이 유지되는 기간을 정하는데 사용한다.
@Repeatable 애너테이션을 반복해서 적용할 수 있게 한다.

 

@Target

애너테이션의 적용범위를 정할 수 있다. 
ex) FIELD / METHOD / PACKAGE 등등.. 

 

@Documented

애너테이션에 대한 정보가 javadoc 문서에 표기하도록 하는 것
자바에서 제공하는 표준 애너테이션과 메타 애너테이션 중 @Override와 @SuppressWarning을 제외하고는 모두 @Documented 가 적용되어 있다.
 

 

@Inherited

@Inherited 애너테이션을 상위 클래스에 작성하면, 하위 클래스들에도 모두 애너테이션이 적용된다. 

 

@Retention

@Retention 애너테이션은 속성으로 유지되는 기간을 지정하는 속성이다. 
ex). SOURCE / CLASS / RUNTIME

* SOURCE : .java 소스 파일까지는 존재하고 클래스 파일이 되면 사라짐
* CLASS : .class 파일까지 애너테이션이 존재하고 런타임에서 사라짐
* RUNTIME : 런타임 실행 시까지도 애너테이션이 남아있음

 

@Repeatable

@Repeatable 애너테이션이 붙은 애너테이션은 반복해서 작성할 수 있다.

!!??

 


사용자 정의 애너테이션

애너테이션을 직접 정의하는 것이다. 방법은 인터페이스를 정의하는 것과 유사하다. 
애너테이션은 java.lang.annotation 인터페이스를 상속받으므로, 다른 클래스나 인터페이스를 상속받을 수 없다.

@interface 애너테이션명 {
	타입 요소명(); 
}

위와 같은 방식으로 정의할 수 있다. 

 

 

 

 

 

 

반응형

'IT 정보 > Java' 카테고리의 다른 글

[Java] 자바의 메모리 영역  (20) 2022.05.20
[Java] enum  (0) 2022.05.19
[Java] 람다 (Lambda)  (8) 2022.05.19
[Java] Collection Framwork (Map편)  (26) 2022.05.18
[Java] Collection Framwork (List편)  (8) 2022.05.18