알버트의 개발하는 블로그

자바 어노테이션에 대해서 (annotation) 본문

웹개발/Spring

자바 어노테이션에 대해서 (annotation)

알버트 2022. 3. 4. 15:34

1. 자바 어노테이션이란?

  어노테이션은 영어단어로 '주석'이라는 의미를 가집니다.

  자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용 가능하며, JDK 1.5 버전 이상에서 사용 가능하게 되었습니다.

 

2. 어노테이션의 용도

  1) 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공합니다.

  2) 소프트웨어 개발툴이 빌드나 배치를 했을 때 코드를 자동으로 생성할 수 있도록 정보를 제공합니다.

  3) 실행시(런타임시) 특정 기능을 실행하도록 정보를 제공합니다.

 

3. 자바 내장 애너테이션

  7개의 표준 어노테이션 중에 3개가 java.lang의 일부이며,

  나머지 4개는 java.lang.annotation으로부터 가져옵니다.

 

4. 내장 어노테이션 종류

  자바 코드에 적용할 수 있는 내장 어노테이션들이 있습니다.

  코딩을 하면서 많이 발견할 수 있는 것들이 내장 어노테이션입니다.

  1) @Override

    선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.

    만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.

    상속 관련해서 정말 많이 보게 되는 오버라이드 어노테이션입니다.

  2) @Deprecated

    해당 메서드가 더 이상 사용되지 않음을 표시합니다. 만약 사용할 경우 컴파일 경고를 발생시킵니다.

  3) @SuppressWarnings

    선언한 곳의 컴파일 경고를 무시하도록 합니다.

  4) @SafeVarargs

    Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.

  5) @FunctionalInterface

    Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.

    만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우

    컴파일 오류를 발생 시킵니다.

 

5. 기타 어노테이션에 적용되는 어노테이션 (메타 애터네이션)

  1) @Retention

    자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지를 결정합니다.

    종류는 다음과 같습니다.

    RetentionPolicy.SOURCE : 컴파일 전까지만 유효. (컴파일 이후에는 사라짐)

    RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효.

    RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능. (리플렉션 사용)

  2) @Documented

    해당 어노테이션을 Javadoc에 포함시킵니다.

  3) @Target

    어노테이션이 적용할 위치를 선택합니다. 종류는 다음과 같습니다.

    ElementType.PACKAGE : 패키지 선언

    ElementType.TYPE : 타입 선언

    ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언

    ElementType.CONSTRUCTOR : 생성자 선언

    ElementType.FIELD : 멤버 변수 선언

    ElementType.LOCAL_VARIABLE : 지역 변수 선언

    ElementType.METHOD : 메서드 선언

    ElementType.PARAMETER : 전달인자 선언

    ElementType.TYPE_PARAMETER : 전달인자 타입 선언

    ElementType.TYPE_USE : 타입 선언

  4) @Inherited

    어노테이션의 상속을 가능하게 합니다.

  5) @Repeatable

    Java8 부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 해줍니다.