-
표준 애너테이션과 메타 애너테이션
표준 애너테이션
- @Override : 오버라이딩된 메서드임을 명시하여 컴파일러가 해당 클래스의 부모 메서드를 찾아 동일한 메서드 확인
- @Deprecated : 기능적으로 아무 의미 없으며 곧 사라질 것임을 사용자에게 알림
- @SuppressWarnings : 경고메세지를 없애도록 약속
- @FunctionalInterface : 함수형 인터페이스임을 알림
- @Native : native메서드에서 참조되는 상수 앞에 붙인다.
메타 애너테이션
메타 애너테이션은 애너테이션을 위한 애너테이션이다. 애너테이션에서 주로 쓰이는 속성을 정할 때 사용한다.
@Target
애너테이션을 적용할 수 있는 대상을 지정한다. 대표적으로 타입, 필드, 메서드, 애너테이션, 파라미터 등등이 있다. MyAnnotation의 타겟을 TYPE로만 정했을 때 TargetClass에 붙인 애너테이션은 문제가 없지만 멤벼 변수 k에 애너테이션을 붙였을 때 컴파일 에러가 난 걸 확인할 수 있다.
@Retention
애너테이션의 유효범위를 지정할 때 사용한다. 주로 사용하는 건 SOURCE와 RUNTIME인데 SOUCE로 설정하면 해당 애노테이션은 컴파일 시에만 사용되고 런타임 시에는 메모리에 로드되지 않는다. 반면 RUNTIME으로 설정하면 런타임 시에도 애너테이션 정보를 활용할 수 있다.
애너테이션 만들기
애너테이션은 멤버필드처럼 요소를 가질 수 있고 메서드는 가질 수 없다. 또한 모든 요소는 애너테이션 생성 시 지정해줘야하며 디폴트 값을 지정한다면 생략 가능하다. 또한 요소이름이 value이고 유일할 경우 이름을 생략할 수 있다.
애너테이션도 결국 객체이기 때문에 기본 메서드 equals(), hashCode(), toString() 메서드를 사용할 수 있다.
애너테이션 요소 규칙
- 요소 타입은 기본형, String, enum, 애너테이션, Class만 허용된다
- ()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 선언할 수 없다.
요소 접근하기
클래스에서 애너테이션을 뽑아내 사전에 지정한 요소를 동적으로 확인할 수 있다.
'java' 카테고리의 다른 글
람다 정리 및 예시 (0) 2021.05.19 Thread 정리 (0) 2021.05.11 컬렉션 정리 (0) 2021.05.10 Java Garbage Collector (0) 2021.05.10 BeanUtils copyProperties 사용법 및 주의사항 (0) 2021.05.04