어노테이션을 사용하는 이유, 나만의 어노테이션만들기 [인프런 워밍업 클럽 스터디 BE 1주차]

heisje·2024년 2월 19일
0
post-custom-banner

스터디 과제

어노테이션을 사용하는 이유 (효과) 는 무엇일까?
나만의 어노테이션은 어떻게 만들 수 있을까?

Java에서 어노테이션을 사용하는 이유

내가 내린 정의는프로그램에게 특정한 기능을 담당한다고 명시해주는 것이다.
또한 Annotation 즉 주석이라는 뜻처럼 코드를 직관적이고 설명하기 좋게 만든다.

찾아보니 어노테이션이란 컴파일/배포/런타임에 코드에 추가 정보를 제공하는 방법이라고 한다. 실행흐름을 변경하거나 코드 간결성 등 다양한 기능을 묶어주는 데 사용할 수 있다.

어노테이션의 기본 사용

어노테이션은 마커만, 싱글값만, 멀티값 등 사용할 수 있다.

// 마커 어노테이션 (Maker Annotation)
@NewAnnotation
// 싱글 값 어노테이션 (Single Value Annotation)
@NewAnnotation(id=10)
// 멀티 값 어노테이션 (Multi Value Annotation)
@NewAnnotation(id=10, name=“hello”, roles= {“admin”, “user"})

나만의 어노테이션 만들기

Custom Annotation을 만들기 위해 어노테이션이 필요하다?...
간단한 어노테이션 예시를 가져왔는데, 여기서 어떤 어노테이션이 쓰였는지 알아보자
| 출처: https://advenoh.tistory.com/21

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {	
    String name();
    String value();
}

@MyAnnotation(name = "someName", value = "Hello World")
public class TheClass {
}

먼저 @interface로 어노테이션임을 명시한다.
@Target으로 적용할 타겟을 지정하고
@Retention으로 유지기간(클래스, 메소드, 필드)를 지정한다.

어노테이션을 위한 어노테이션 정리

@Target

이 어노테이션은 선언한 어노테이션이 적용될 수 있는 위치를 결정한다
@Target(ElementType.TYPE)

ElementType Enum에 선언된 값

  • TYPE : class, interface, enum에 적용된다.
  • FIELD : 클래스 필드 변수
  • METHOD : 메서드
  • PARAMETER : 메서드 인자
  • CONSTRUCTOR : 생성자
  • LOCAL_VARIABLE : 로컬 변수
  • ANNOTATION_TYPE : 어노테이션 타입에만 적용된다
  • PACKAGE : 패키지
  • TYPE_PARAMETER : 자바8부터 추가된 값으로 제네릭 타입 변수에 적용된다. (ex. MyClass)
  • TYPE_USE : 자바8부터 추가된 값으로 어떤 타입에도 적용된다 (ex. extends, implements, 객체 생성시등등)

@Retention

@Retention(RetentionPolicy.RUNTIME)
어노테이션이 어느레벨까지 유지되는지를 결정짓는다.

RetentionPolicy Enum에 선언된 값

  • SOURCE : 자바 컴파일에 의해서 어노테이션은 삭제된다
  • CLASS : 어노테이션은 .class 파일에 남아 있지만, runtime에는 제공되지 않는 어노테이션으로 Retention policy의 기본 값이다
  • RUNTIME : runtime에도 어노테이션이 제공되어 자바 reflection으로 선언한 어노테이션에 접근할 수 있다

@Inherited

이 어노테이션을 선언하면 자식클래스가 어노테이션을 상속 받는다

@Documented

이 어노테이션을 선언하면 새로 생성한 어노테이션이 자바 문서 생성시 자바 문서에도 포함시키는 어노테이션이다.

@Repeatable

자바8에 추가된 어노테이션으로 반복 선언을 할 수 있게 해준다.

Reference

https://advenoh.tistory.com/21

profile
김희제의 기술블로그
post-custom-banner

0개의 댓글