커스텀 어노테이션 생성 규칙
- 어노테이션 타입은 @interface로 정의
- 모든 어노테이션은 java.lang.Annotation 인터페이스를 상속하기 때문에 다른 클래스나 인터페이스를 상속받으면 안 된다.
- 파라미터 멤버들의 접근자는 public이거나 default로 설정
- 파라미터 멤버들은 기본형과 String, Enum, Class, 어노테이션만 사용 가능
- 예외를 선언할 수 없다.
- 요소의 () 안에 매개변수를 선언할 수 없다.
[CustomAnnotation]
Spring Data Jpa -> Repository를 테스트하기 위해 커스텀 어노테이션 작성
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@DataJpaTest(includeFilters = @ComponentScan.Filter(
type = ASSIGNABLE_TYPE,
classes = {JpaAuditConfig.class, BaseEntity.class}))
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
public @interface RepositoryTest {
}
@DataJpaTest : Jpa 필요한 클래스들만 로딩되어 테스트 속도 향상
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) : 내장된 임베디드 데이터베이스가 아닌 실제 연결된 Database를 사용하게 함.
@Target : 자바 컴파일러가 어노테이션이 어디에 적용될지 결정하기 위해 사용
- Default : 모든 대상
- @Target(ElementType.TYPE) : 타입 (class, interface, enum) 선언부
- @Target(ElementType.FIELD) : 멤버 변수 선언부
- @Target(ElementType.METHOD) : 메소드 선언부
- @Target(ElementType.PARAMETER) : 매개변수 선언부
- @Target(ElementType.CONSTRUCTOR) : 생성자 선언부
- @Target(ElementType.LOCAL_VARIABLE) : 지역 변수 선언부
- @Target(ElementType.ANNOTATION_TYPE) : 어노테이션 타입 선언부
- @Target(ElementType.PACKAGE) : 패키지 선언부
- @Target(ElementType.TYPE_PARAMETER) : 매개변수 타입 선언부
- @Target(ElementType.TYPE_USE) : 타입 사용부
@Retention : 어노테이션의 지속 시간을 결정
- RetentionPolicy.SOURCE : 컴파일 후에 정보들이 사라진다. / 컴파일이 완료되면 의미가 없어지므로, 바이트 코드에 기록되지 않는다.
- RetentionPolicy.CLASS : 컴파일 타임 때만 .class 파일에 존재하며, 런타임 때는 없어진다. / 바이트 코드 레벨에서 어떤 작업을 해야 할 때 유용하다.
- RetentionPolicy.RUNTIME : 런타임시에도 .class 파일에 존재합니다. / 커스텀 어노테이션을 만들 때 주로 사용
@Inherited : 자식 클래스에 상속할지 결정
댓글