티스토리 뷰
728x90
반응형
어노테이션이란?
- 어노테이션이란 주석이라는 뜻을 가지고 있습니다.
- 주석이라는 뜻을 가지고 있지만 일반 주석과는 다르게 코드를 작성할 수 있습니다. 이 코드를 작성할 수 있다는 것은 무엇인가를 할 수 있다는 의미입니다.
어노테이션 정의하는 방법
@Target
- @Target은 해당 어노테이션 사용 대상을 지정합니다. METHOD를 선언하게 되면 메서드에 사용할 수 있다고 지정된 것입니다.
@Retention
- @Retention은 어노테이션 유지정보를 지정하는데 사용합니다. RUNTIME으로 지정하게 되면 실행 시에 해당 어노테이션을 참조하게 됩니다.
@interface
- @interface은 어노테이션 타입을 선언하는 키워드입니다. 어노테이션 타입 선언을 일반적인 인터페이스 선언과 구분하기 위해 @를 붙입니다.
number(), text()
- number()의 리턴 타입은 int이며, text()의 리턴타입은 String입니다. 이렇게 메서드처럼 어노테이션 안에 선언해 놓으면 이 어노테이션을 사용할 때 항목에 대한 타입으로 값을 지정할 수 있습니다.
default
- default를 사용하면 기본값을 지정할 수 있습니다.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnnotation {
public int number();
public String text() default "Hello World";
}
@Target 어노테이션
- @Target 어노테이션은 어노테이션이 적용 가능한 대상을 지정하는데 사용합니다. 적용 가능한 대상을 여러개 지정하고 싶다면 {} 배열을 사용하면 됩니다.
CONSTRUCTOR
- 생성자 선언시
FIELD
- enum 상수를 포함한 필드값 선언시
LOCAL_VARIABLE
- 지역 변수 선언시
METHOD
- 메서드 선언시
PACKAGE
- 패키지 선언시
PARAMETER
- 파라미터 선언시
TYPE
- 클래스, 인터페이스, enum등 선언시
@Retention 어노테이션
- @Retention 어노테이션은 유지되는 기간을 지정하는데 사용됩니다. 즉 어느 시점까지 어노테이션의 메모리를 가져갈건지 설정합니다.
SOURCE
- 어노테이션 정보가 컴파일 시 사라집니다.
CLASS
- 클래스 파일에 있는 어노테이션 정보가 컴파일러에 의해서 참조가 가능합니다. 하지만 가상머신에서는 사라집니다.
RUNTIME
- 실행 시 어노테이션 정보가 가상 머신에 의해 참조가 가능합니다.
@Documented 어노테이션
- 어노테이션 정보가 javadoc으로 작성된 문서에 포함되도록 하는 메타 어노테이션입니다.
- 자바에서 제공하는 기본 어노테이션 중에 '@Override'와 '@SuppressWarnings'을 제외하고는 모두 @Documented 메타 어노테이션이 붙어 있습니다.
@Inherited 어노테이션
- @Inherited 어노테이션은 자손 클래스에 상속되도록 합니다. 해당 어노테이션이 붙은 어노테이션을 조상 클래스에 선언하면 자손 클래스도 이 어노테이션이 붙은 것과 같이 인식됩니다.
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnnotation {
public int age() default 30;
public String name() default "홍길동";
}
@UserAnnotation
public class Parent {
private int age;
private String name;
}
public class Child extends Parent{ }
public class Example {
public static void main(String[] args) {
UserAnnotation annotation = Child.class.getAnnotation(UserAnnotation.class);
System.out.println(annotation);
// @com.annotationExample.UserAnnotation(name="홍길동", age=30)
}
}
어노테이션 프로세서
어노테이션 프로세서란?
- 자바 컴파일러의 컴파일 단계에서 유저가 정의한 어노테이션 소스코드를 분석하고 처리하기 위해 사용되는 훅입니다. 컴파일 에러나 컴파일 경고를 만들어 내거나 소스코드(.java)와 바이트코드(.class)를 내보내기도 합니다.
어노테이션 프로세서 사용 예제
- Lombok
- AutoService
- @Override
어노테이션 프로세서의 장점
- 런타임 비용이 없습니다.(컴파일 타임에 조작이 완료된 상태이기 때문입니다.)
728x90
반응형
'JAVA > JAVA기본' 카테고리의 다른 글
JAVA - 제네릭이란? (0) | 2022.01.30 |
---|---|
JAVA - 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O (0) | 2022.01.30 |
JAVA - Enum이란? (0) | 2022.01.29 |
JAVA - Main Thread란(feat.동기화, 데드락)? (0) | 2022.01.27 |
JAVA - Thread란? (0) | 2022.01.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- spring boot redis 대기열 구현
- microkernel architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot excel download oom
- pipeline architecture
- spring boot 엑셀 다운로드
- java userThread와 DaemonThread
- spring boot redisson destributed lock
- transactional outbox pattern spring boot
- space based architecture
- transactional outbox pattern
- spring boot poi excel download
- 공간 기반 아키텍처
- pipe and filter architecture
- spring boot redisson sorted set
- redis sorted set으로 대기열 구현
- 람다 표현식
- JDK Dynamic Proxy와 CGLIB의 차이
- 레이어드 아키텍처란
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- @ControllerAdvice
- java ThreadLocal
- spring boot redisson 분산락 구현
- 서비스 기반 아키텍처
- 자바 백엔드 개발자 추천 도서
- spring boot excel download paging
- polling publisher spring boot
- redis 대기열 구현
- service based architecture
- redis sorted set
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함