애너테이션

  • 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종
    • 메타데이터 - 데이터에 대한 데이터, 즉 데이터에 대해 설명이나 정보를 제공하기 위한 목적의 데이터
@RequiredArgsConstructor
public class PaymentRepositoryImpl implements PaymentRepositoryCustom {

    private final JPAQueryFactory queryFactory;

	// @Override는 해당 애너테이션이 붙은 메서드가 오버라이드 메서드임을 알려주는 애너테이션이다.
    @Override
    public Page<Payment> findByNameContains(String word, Pageable pageable) {
        List<Payment> payments = queryFactory.selectFrom(payment)
                .leftJoin(payment.student, student).fetchJoin()
                .where(searchCondition(word))
                .limit(pageable.getPageSize())
                .offset(pageable.getOffset())
                .orderBy(payment.id.desc())
                .fetch();

        int size = queryFactory.selectFrom(payment)
                .where(searchCondition(word))
                .fetch()
                .size();

        return PageableExecutionUtils.getPage(payments, pageable, () -> size);
    }
}

 

메타 애너테이션

  • 애너테이션을 정의하는데 사용되는 애너테이션. 애너테이션을 정의할 때에만 사용할 수 있다.

@Retention

  • 애너테이션이 유지되는 생명주기를 설정하는 메타 애너테이션
    • SOURCE
      • 소스 코드에서만 유지. 컴파일 시점에 제거됨
    • CLASS
      • 컴파일된 .class 파일에 애너테이션을 유지시킴. 런타임 시점에 제거됨
      • SOURCE 와 마찬가지로 런타임 시점에는 결국 제거된 상태지만 소스 코드 없이 .class 파일만 제공되는 상황에서 애너테이션 정보를 제공하기 위해서 사용됨 (ex - jar 파일의 .class)
    • RUNTIME
      • 런타임 시점까지 애너테이션을 유지시킴
@Retention(RetentionPolicy.SOURCE)
@Retention(RetentionPolicy.CLASS)
@Retention(RetentionPolicy.RUNTIME)

애너테이션의 Retention 설정값이 SOURCE 의 경우 컴파일 후 바이트코드에서는 제거된다.

 

@Target

  • 애너테이션을 적용할 수 있는 유형을 설정하는 메타 애너테이션
  • TYPE, FIELD, METHOD, PARAMETER 등 다양한 유형을 지정할 수 있다.
@Target(ElementType.METHOD)
@Target(ElementType.PARAMETER)

 

@Inherited

  • @Inherited 이 적용된 애너테이션을 사용한 클래스를 상속한 서브클래스는 애너테이션 정보까지 상속받도록 하는 메타 애너테이션

'Java' 카테고리의 다른 글

Thread의 동기화 처리  (0) 2022.09.04
Demon Thread  (0) 2022.09.04
Thread 의 동시성과 병렬성  (0) 2022.09.01
JVM - Java Virtual Machine  (0) 2022.08.30
자바 소스 코드의 실행 과정  (0) 2022.08.30

+ Recent posts