[인프런 BE 0기] Annotation에 대하여

HeeYeon Kim·2024년 2월 19일
0

STUDY

목록 보기
7/15
post-thumbnail

인프런 워밍업 클럽 스터디 0기
BE 1일차



Annotation

  • 사전적으로 주석을 의미함

  • 소스코드에 추가하여 사용할 수 있는 메타데이터의 일종

    • 메타데이터 : 어플리케이션이 처리해야할 데이터가 아니라 컴파일과 실행 과정에서 코드를 어떻게 처리해야하는지 알려주기 위한 추가 정보
  • @ 기호를 앞에 붙여서 사용

  • 자바 어노테이션은 클래스 파일에 임베드되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작함



종류

자바 빌트인 어노테이션

  • 자바에서 제공하는 어노테이션
  • 예시
    • @Override
    • @Deprecated
    • @SuppressWarnings
      ...

메타 어노테이션

  • 커스텀 어노테이션을 만들 때 사용
  • 예시
    • @Retention
      • 어노테이션의 리텐션 기간을 명명함
    • @Documented
      • 자바 문서에 어노테이션 정보가 표현됨
    • @Target
      • 생성할 어노테이션이 적용될 수 있는 위치를 나열함
    • @Inherited
      • 자식 클래스가 어노테이션을 상속 받을 수 있음
    • @Repeatable
      • 반복적으로 어노테이션을 선언할 수 있음

    커스텀 어노테이션

  • 사용자가 메타 어노테이션을 이용해 만든 어노테이션



Annotation 용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공함
  • 소프트웨어 개발툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행 시 특정 기능을 실행하도록 정보제공
  • 메타데이터 정보에 따라 실행 흐름을 변경할 수 있는 코딩이 가능해 깔끔한 코딩 가능



Custom Annotation

장점

  • 반복되는 코드를 줄일 수 있음

단점

  • 무분별하게 사용되면 해당 어노테이션이 용도 파악을 위한 시간이 부가적으로 필요
  • 오히려 비효율적으로 작용할 수 있음

구현 방법

  • @Interface [어노테이션 이름] 이라는 형태로 어노테이션을 정의해야함

  • 커스텀 어노테이션에 대한 메타 어노테이션은 어노테이션 정의 앞쪽에 붙여줌

  • 예시

    1. 클래스에 선언

      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.ANNOTATION_TYPE)
      public @interface MyAnnotation1 {
         String name();
         String value();
      }
    2. 클래스 필드에 선언

      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.FIELD)
      public @interface MyAnnotation1 {
         String name();
         String value();
      }
      public class TheClass{
      	@MyAnnotation(name="name",value="Hello")
         public String myField = null;
      }
    3. 메서드에 선언

      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.Method)
      public @interface MyAnnotation1 {
         String name();
         String value() default "기본값";
      }
      public class TheClass{
      	@MyAnnotation(name="name",value="Hello")
         public void doThis(){
         }
         
         @MyAnnotation(name="doThatMethod")
         public void doThat(){
         }
      }





강의

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!

0개의 댓글