애노테이션 정의하는 방법
1) 애노테이션이란?
사전적인 의미로는 주석으로 자바에서 애노테이션은 코드 사이에 주석처럼 쓰이며 특별한 의미나 기능을 수행하도록 하는 메타 데이터의 일종이다. 메타 데이터는 애플리케이션이 처리할 데이터가 아닌 컴파일 실행 과정에서 코드를 어떻게 처리해야하는지 알려 주기 위한 추가 정보이다.
2) 새로운 annotation 정의 방법
[정의 방법]
@interface 애노테이션이름 {
타입 요소이름(); //애노테이션 요소를 선언
...
}
여기서 애노테이션 내에 선언된 메소드를 '애노테이션 요소'라고 한다.
이는 반환값이 있고 매개변수는 없는 추상 메소드의 형태를 가지며 , 상속을 통해 구현하지 않아도 된다.
다만, 애노테이션 적용시 이 요소들을 빠짐없이 지정해줘야 한다.
애노테이션의 각 요소는 기본값을 가질 수 있으며, 기본값이 있는 요소는 애노테이션을 적용할 때 값을 지정하지 않으면 기본값이 사용된다.
ex)
@interface test{
int count() default 1; // 기본값이 1인 애노테이션 요소 -> 따로 주어지지 않으면 기본값인 1을 쓴다.
}
또한 애노테이션 요소가 오직 하나뿐이고 이름이 value인 경우 , 애노테이션을 적용할 때 요소의 이름은 생략하고 값만 적어도 된다.
ex)
@interface test {
String value();
}
@test("passed")
class Main {....}
3) 애노테이션 요소의 규칙
- 요소의 타입 -> 기본형 , String, enum , 애노테이션 , class 만 허용된다.
- () 안에 매개변수 선언 불가하다
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
retention
1) @retention이란?
애노테이션 유지되는 기간을 지정하는데 사용한다.
2) 애노테이션 유지 정책 종류
애노테이션 유지 정책 종류에 대해 살펴보자
SOURCE | 소스파일에 존재하하지만 클래스 파일에는 존재하지 않음 |
CLASS | 클래스 파일에는 존재하지만 실행시에는 사용 불가함, 기본값 |
RUNTIME | 클래스 파일에 존재하고 실행시 사용 가능함 |
// 소스파일에만 존재하고 컴파일 시에만 사용 , 클래스 파일에는 없음
@Retention (RetentionPolicy.SOURCE)
//클래스 파일에 존재하지만 실행 시 사용 불가 , 기본 값
@Retention (RetentionPolicy.CLASS)
//클래스 파일에 존재하고 실행 시 사용 가능
@Retention (RetentionPolicy.RUNTIME)
ex)
@Target(ElemnetType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override { }
target
1) @Target 이란?
사용할 어노테이션을 적용할 대상을 지정하는 데 사용한다.
이 옵션은 java.lang.annotation.ElementType에 정의되어 있으며, 이를 사용하려면 import를 해주어야 한다.
2) @Target 의 종류
@Target(ElementType.ANNOTATION_TYPE) // 애노테이션
@Target(ElementType.CONSTRUCTOR) // 생성자
@Target(ElementType.FIELD) // 필드 (멤버변수 , Enum 상수)
@Target(ElementType.LOCALVARIABLE) //지역변수
@Target(ElementType.METHOD) //메소드
@Target(ElementType.PACKAGE) //패키지
@Target(ElementType.PARAMETER) //매개변수(파라미터)
@Target(ElementType.TYPE) //타입 (클래스, 인터페이스, Enum)
@Target(ElementType.TYPE_PARAMETER) //타입 매개변수(제네릭과 같은 매개변수)
@Target(ElementType.TYPE_USE) //타입이 사용되는 모든 대상
ex)
import java.lang.annotation.Target;
import java.lang.annotation.ElementType.*;
@Target({FIELD , TYPE , TYPE_USE})
public @interface customAnnotation{ }
@customAnnotation
class Main {
@customAnnotation
int num;
}
documented
@Documented 란?
애노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 하는 어노테이션 설정이다.
javadoc는 자바에서 지정한 형태의 주석들을 인식하여 html을 통해 api 문서 형태로 만들어주는 도구이다.
자바에서 제공하는 표준 애노테이션과 메타 애노테이션 중 @Override와 @SuppressWarnings 애노테이션을 제외하고 모든 애노테이션에 적용된다.
ex)
import java.lang.annotaiton.ElementType;
@Documented
@Targe(ElemnetType.TYPE)
public @interface customAnnotation { }
애노테이션 프로세서
1) 애노테이션 프로세서란?
컴파일 단계에서 Annotation에 정의된 일렬의 프로세스를 동작하게 하는 것을 의미한다.
본질적으로 애노테이션 프로세서는 java 컴파일러의 플러그인 일종으로 이를 잘 사용하면 코드를 단순화 하기에 좋다.
또한 컴파일 단계에서 실행되기 때문에 빌드 단계에서 에러를 출력하게 하거나 소스코드 및 바이트 코드를 생성할 수도 있다.
사용 예 ) @Override , Lombok
2) Lombok이란?
@Getter , @Setter , @Builder 등의 애노테이션과 애노테이션 프로세서를 제공하여 표준적으로 작성할 코드를 개발자 대신 생성해주는 라이브러리이다.
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
@Getter @Setter @EqualsAndHashCode
class Member {
private String name;
private int age;
}
public class MemberTest {
@Test
public void getterSetter(){
Member member = new Member();
member.setName("minkyu");
Assert.assertEquals(member.getName(), "minkyu");
}
}
위 소스코드를 보면 소스코드에 getter와 setter을 직접 만들지 않아도 함수를 쓸 수 있는 것을 볼 수 있다.
이처럼 컴파일 단계에서 Annotation에 정의된 일렬의 프로세스를 동작하게 하는 것을 애노테이션 프로세서라고 한다.
[참고자료]
[JAVA] Annotation(애노테이션)이란?
Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처
velog.io
https://gksdudrb922.tistory.com/177
[Java] 애노테이션
https://github.com/whiteship/live-study whiteship/live-study 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com 백기선님 자바 기초 스터디 12주차 목표 자바의 애노테이션에
gksdudrb922.tistory.com
https://ittrue.tistory.com/160
[Java] 자바 메타 어노테이션 정리 및 활용
메타 어노테이션 (Meta Annotation) 메타 어노테이션은 어노테이션에 붙이는 어노테이션이다. 즉, 사용할 어노테이션을 정의하는 데 사용한다. 메타 어노테이션은 사용할 어노테이션의 적용대상 또
ittrue.tistory.com
애노테이션 프로세서(Annotation processor)
Annotation Processor란? Annotation Processor는 컴파일 단계에서 Annotation에 정의된 일렬의 프로세스를 동작하게 하는 것을 의미합니다. 컴파일 단계에서 실행되기 때문에, 빌드 단계에서 에러를 출력하게
roadj.tistory.com
애노테이션 프로세서
애노테이션 프로세서 일반적으로 애노테이션에 대한 코드를 검사, 수정 또는 생성하는데 사용된다. 본질적으로 애노테이션 프로세서는 java 컴파일러의 플러그인의 일종이다. 애노테이션 프로
oneny.tistory.com
'🦁아기사자' 카테고리의 다른 글
[Java] 제네릭 (0) | 2025.03.31 |
---|---|
[Java] I/O (0) | 2025.03.31 |
[Java] Enum (0) | 2025.03.26 |
[Java] 멀티스레드 프로그래밍 (0) | 2025.03.25 |
[Java] 인터페이스 (0) | 2025.03.20 |