Ian's Archive 🏃🏻

Profile

Ian

Ian's Archive

Developer / React, SpringBoot ...

📍 Korea
Github Profile →
Categories
All PostsAlgorithm19Book1C1CI/CD2Cloud3DB1DesignPattern9ELK4Engineering1Front3Gatsby2Git2IDE1JAVA7JPA5Java1Linux8Nginx1PHP2Python1React9Security4SpatialData1Spring26
thumbnail

Annotation 정리

JAVA
2024.11.25.

1. 어노테이션이란

어노테이션은 사전적으로는 “주석”이라는 의미를 가지고 있고, 메타데이터 라고 볼 수 있다.

메타데이터란 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보이다.

자바에서는 @을 이용해 주석처럼 달아 특수한 의미를 부여한다.

어노테이션은 다음 세가지 용도로 사용된다.

  • 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공 (ex - @Override)
  • 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행 시 특정 기능을 실행하도록 정보 제공

2. 어노테이션 종류

  1. 표준 어노테이션
  • 자바에서 기본으로 제공하는 어노테이션
  1. 메타 어노테이션
  • 다른 어노테이션에서도 사용되는 어노테이션을 말하며, custom annotation생성 시 주로 사용

3. 표준 어노테이션 종류

  • @Override
    • @Override 어노테이션은 메서드 앞에 오는 어노테이션
    • 상위클래스의 메서드를 오버라이딩한다는 것을 컴파일러에게 알리는 역할
  • @Deprecated
    • @Deprecate 어노테이션은 새로운 버전의 JDK가 등장하여 더 이상 사용하지 않는 필드나 메서드가 있을 경우 사용
    • 해당 메서드가 하위 버전의 호환성 문제로 삭제하기 곤란하여 남겨두어야만 할 때
  • @SuppressWarning
    • 컴파일 경고 메시지가 나타나지 않도록 한다.
  • @FunctionalInterface
    • 컴파일러가 함수형 인터페이스의 선언이 바르게 선언되었는지 확인

4. 메타 어노테이션

다음과 같이 인터페이스 정의

복사
public @interface AnnotationName

어노테이션은 엘리먼트를 멤버로 가질 수 있다.

엘리먼트는 타입과 이름으로 구성되며, 디폴트 값을 가질 수 있다.

다음과 같이 작성

복사
public @interface AnnotationName {
  String value();
  String elementName1();
  int elementName2() default 5;
}

어노테이션 사용 시

복사
@AnnotationName(value = "값", elementName1 = "이름")
@AnnotationName(value = "값", elementName1 = "이름", elementName2 = "이름2")

어노테이션은 기본 엘리먼트인 value를 가진다. 다음과 같이 작성 가능하다

복사
@AnnotationName("값")
복사
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

다음과 같이 @Interface를 사용해 어노테이션을 정의하며, 그 뒤에 사용 할 어노테이션 이름이 온다.

어노테이션 상단에 @Target@Retention어노테이션이 있는데 적용 대상유지기간을 지정해주는 역할을 한다.

@Target 어노테이션은 적용할 대상을 지정하는 데 사용한다.

인자 값 설명
ElementType.TYPE 클래스, 인터페이스, enum
ElementType.FIELD 필드
ElementType.METHOD 메서드
ElementType.PARAMETER 파라미터
ElementType.CONSTRUCTOR 생성자
ElementType.LOCAL_VARIABLE 지역 변수
ElementType.ANNOTATION_TYPE 어노테이션
ElementType.PACKAGE 패키지

@Retention 어노테이션은 어노테이션의 지속 시간을 결정하는 데 사용한다.

인자 값 설명
SOURCE 어노테이션은 소스 파일에서만 유지된다. 컴파일 과정 중에는 이 어노테이션 정보가 사용되지만, 컴파일된 .class 파일에는 포함되지 않으므로 주로 컴파일러에 의해 사용되는 어노테이션에 적용된다. ex): @Override, @SuppressWarnings
CLASS 컴파일 시점에서 필요한 정보를 제공하고, 런타임에는 필요 없는 경우에 사용된다.(디폴트 값)
RUNTIME 어노테이션은 .class 파일에 포함되며, 런타임에도 JVM에 의해 유지됩니다. 리플렉션을 통해 런타임에 어노테이션 정보를 읽을 수 있다. ex) 스프링의 @Autowired

리플렉션이란?

  • 클래스가 가지고 있는 필드가 무엇인지, 어떤 생성자를 가지고 있는지, 어떤 메소드를 가지고 있는지, 적용된 어노테이션은 무엇인지 알아내는 것

Reference

이것이 자바다

Previous Post
Akamai 기업에 대해 알아보자
Next Post
Modern Java In Action 1장 정리
Thank You for Visiting My Blog, I hope you have an amazing day 😆
© 2023 Ian, Powered By Gatsby.