TIL_Annotation_241221

2024. 12. 21. 17:57·Spring 단기심화 2기

Annotation이란?

어노테이션은 적용된 소스코드에 추가적인 메타데이터를 할당한다.

메서드, 인터페이스, 클래스, 필드에 붙어서 :

  • 컴파일러에게 경고과 에러를 알려준다.
  • 컴파일 시점에 소스코드를 조작한다.
  • 런타임 시점에 동작을 수정하거나 검증한다.

Annotation의 종류

Built-in annotation

자바 언어에 포함된 기본 제공 어노테이션에는 @Override, @SuppressWarnings, @Deprecated, @SafeVarargs, @FunctionalInterface, @Native 이 있다.

Meta-annotation

메타 어노테이션은 다른 어노테이션에 적용할 수 있는 어노테이션이다.

  1. @Retention : 어노테이션의 유지 범위를 설정
  • RetentionPolicy.SOURCE : 컴파일 전까지만 유효, 컴파일러에 의해 삭제됨
  • RetentionPolicy.CLASS : 컴파일러가 .class 파일 생성 시 작성, 런타임 환경에서는 삭제됨
  • RetentionPolicy.RUNTIME : 런타임(JVM)에도 유지, Reflection으로 접근 가능
  1. @Target : 어노테이션의 적용 대상를 설정
  • ANNOTATION_TYPE: 어노테이션 인터페이스 선언
  • CONSTRUCTOR: 생성자 선언
  • FIELD: 필드 선언 (열거형 상수 포함)
  • LOCAL_VARIABLE: 로컬 변수 선언
  • METHOD: 메서드 선언
  • MODULE: 모듈 선언
  • PACKAGE: 패키지 선언
  • PARAMETER: 메서드 매개변수 선언
  • RECORD_COMPONENT: 레코드 컴포넌트 선언
  • TYPE: 클래스, 인터페이스 (어노테이션 인터페이스 포함), 열거형 또는 레코드 선언
  • TYPE_PARAMETER: 타입 매개변수 선언
  • TYPE_USE: 타입 사용 위치 (예: 제네릭 타입, 배열, 타입 캐스팅 등)
  1. @Inherited : 어노테이션을 하위 클래스까지 적용
  2. @Documented: JavaDoc에 포함
  3. @Repeatable : 어노테이션을 연속적으로 작성 가능

Custom annotation

사용자에 의해 정의된 어노테이션

Custom Annotation 적용

Annotation 정의

@Retention(RetentionPolicy.RUNTIME) // 런타임에서도 어노테이션 접근 가능
@Target(ElementType.TYPE) // 클래스나 인터페이스에만 적용 가능
public @interface MyAnnotation {
    String key() default "default-key"; // 기본값 제공
}

Annotation 적용

@MyAnnotation(key = "CustomValue") // 어노테이션에 값 지정
public class MyClass {
    // 클래스 구현
}

Annotaion 처리

Reflection을 사용하여 런타임에 클래스의 어노테이션 정보를 읽고 처리합니다.

import java.lang.annotation.Annotation;

public class AnnotationProcessor {
    public static void main(String[] args) {
        // 클래스 객체 가져오기
        Class<MyClass> myClass = MyClass.class;

        // 어노테이션 확인
        if (myClass.isAnnotationPresent(MyAnnotation.class)) {
            // 어노테이션 읽기
            MyAnnotation annotation = myClass.getAnnotation(MyAnnotation.class);

            // key 값 출력
            System.out.println("Annotation Key: " + annotation.key());
        } else {
            System.out.println("MyAnnotation is not present.");
        }
    }
}

결과값

Annotation Key: CustomValue
저작자표시 비영리 변경금지

'Spring 단기심화 2기' 카테고리의 다른 글

TIL_MapStruct Mapping 오류_250102  (1) 2025.01.03
TIL_MapStruct_241219  (1) 2024.12.20
TIL_JVM 구조와 동작 원리_241208  (3) 2024.12.09
TIL_HTTP 메서드의 멱등성_241205  (0) 2024.12.05
TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205  (0) 2024.12.05
'Spring 단기심화 2기' 카테고리의 다른 글
  • TIL_MapStruct Mapping 오류_250102
  • TIL_MapStruct_241219
  • TIL_JVM 구조와 동작 원리_241208
  • TIL_HTTP 메서드의 멱등성_241205
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    캡슐화
    리포지터리
    코드트리
    애그리거트
    협력
    도메인 주도 개발 시작하기
    인터페이스
    유스케이스
    메시지
    역할
    가독성
    타입
    코딩트리조별과제
    객체지향의 사실과 오해
    DIP
    매핑 구현
    모듈화
    오블완
    책임
    도메인 모델
    객체
    specification
    good code bad code
    코드 계약
    추상화
    책임-주도 설계
    애그리거트 루트
    일반화
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
TIL_Annotation_241221
상단으로

티스토리툴바