-
자바 Annotation언어/Java 2024. 2. 19. 19:59728x90반응형SMALL
메타데이터의 한 형태인 Annotation은 프로그램 자체의 일부가 아닌 프로그램에 대한 데이터를 제공합니다. Annotation은 주석이 달린 코드의 작동에 직접적인 영향을 미치지 않습니다.
Annotation의 용도
- 컴파일러에 대한 정보 — 컴파일러는 주석을 사용하여 오류를 감지하거나 경고를 억제할 수 있습니다.
- 컴파일 시간 및 배포 시간 처리 — 소프트웨어 도구는 주석 정보를 처리하여 코드, XML 파일 등을 생성할 수 있습니다.
- 런타임 처리 — 일부 주석은 런타임 시 검사할 수 있습니다.
어노테이션 형태
// 예1 (기본) @Annotation // 예2 (요소 1개 가진 경우) @Annotation("name") // 예2 (2개 이상의 요소를 가지고 있는 경우) @Annotation( name = "name1" age = 10 )
- @를 통해 컴파일러에게 어노테이션임을 알릴 수 있다.
- 어노테이션은 안에 요소들을 포함할 수 있다.
- 적용될 수 있는 곳
- 클래스
- 멤버 변수
- 다른 프로그래밍 요소들
- JAVA SE 8 이후 타입의 용도로도 적용될 수 있다.
- new @Interned MyObject() : 인스턴스 생성 시
- (@NonNull String) str : 타입캐스팅 시
- @Readonly List<@Readonly T> {...} : 조항 구현 시
- @Critical TemperatureException {...} : Exception 반환을 위해
사전 정의된 어노테이션
- @Deprecated : 더 이상 사용하지 않는 것들을 표시하기 위해 사용된다.
- @Override : 부모 클래스의 요소를 오버라이드했다는 것을 의미한다.
- @SuppressWarnings : 특정 경고 메시지를 나타나지 않도록 억제하기 위해 사용된다.
- @SafeVarargs : 메서드나 생성자에 적용될 때 코드가 제네릭 매개변수를 사용할 때 경고를 나타내지 않는다.
- @FunctionalInterface : functional interface를 나타낼 때 사용된다.
다른 어노테이션에 적용될 수 있는 어노테이션
- @Retention : 어노테이션이 유지되는 기간을 정하기 위해 사용한다.
- RetentionPolicy.SOURCE : 소스코드 레벨에서만 사용되고 컴파일러에게는 무시된다.
- RetentionPolicy.CLASS : 컴파일 단계까지 유지되고, JVM에 의해서는 무시된다.
- RetentionPolicy.RUNTIME : 런타임까지 유지된다.
- @Documented : 어노테이션으로 선언된 요소의 설명이 api 문서에도 표신된다.
- @Target : 해당 어노테이션의 적용 제한 범위 설정
- ElementType.ANNOTATION_TYPE : 어노테이션에 적용 가능
- ElementType.CONSTRUCTOR : 생성자에 적용 가능
- ElementType.FIELD : 멤버 변수에 적용 가능
- ElementType.LOCAL_VARIABLE : 지역 변수에 적용 가능
- ElementType.METHOD : 메서드에 적용 가능
- ElementType.PACKAGE : 패키지 선언에 적용 가능
- ElementType.PARAMETER : 메서드 매개변수에 적용 가능
- ElementType.TYPE 클래스 요소의 어떤 타입에도 적용 가능
- @Inherited : 부모 클래스에 적용하면 자식 클래스에도 해당 어노테이션이 적용된다.
- @Repeatable : 해당 어노테이션을 똑같은 곳에 중복되게 선언할 수 있도록 합니다.
어노테이션 선언 방법
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }
위와 같이 @interface로 원하는 어노테이션을 선언한 뒤 적용 범위와 유지 기간을 설정해주면 된다.
Reference
https://docs.oracle.com/javase/tutorial/java/annotations/index.html
반응형LIST'언어 > Java' 카테고리의 다른 글
Lombok 살펴보기 (0) 2023.08.16 자바 데코레이터 패턴, 쓰레드, 멀티 쓰레드 프로그래밍 (2) 2023.07.16 자바 스트림, reduce, 예외 처리, logging (2) 2023.07.14 자바 내부 클래스, 람다식, 함수형 프로그래밍, 함수형 인터페이스 (2) 2023.07.13 자바 자료구조, 제네릭, 컬렉션 (0) 2023.07.11