본문 바로가기
Computer Science/Java

어노테이션

by eunnnn 2023. 4. 10.

어노테이션의 정의

어노테이션은 사전적 의미로는 주석이라는 뜻이다. 자바에서 사용될 때의 어노테이션은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터(meta data: 데이터를 위한 데이터)라고 볼 수 있다.

 

 어노테이션은 다음과 같은 용도로 사용된다.

  1. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  2. 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공 (SW 개발 툴에서 어노테이션의 정보를 통해 특정 코드를 자동으로 추가할 수 있)
  3. 실행시(런타임시) 특정 기능을 실행하도록 정보를 제공

그래서 요약하자면, 어노테이션은 작성한 코드에 대해 추가적인 정보를 제공하면서 컴파일 타임 혹은 런타임 시점에서 해당 코드에 필요한 추가적인 처리를 해 주는 역할을 한다.

 

이러한 어노테이션을 사용하는 순서는 다음과 같다.

  1. 어노테이션을 정의
  2. 클래스에 어노테이션을 배치
  3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하고, 기능 실시

+) 추가 정보 - Reflection이란?

자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 생성자(Constructor), 멤버 필드(Member Variables) 그리고 멤버 메서드(Member Method) 등을 사용할 수 있는 기법.

클래스의 패키지 정보, 접근 지정자, 수퍼 클래스, 어노테이션(Annotation) 등을 얻을 수 있다.


어노테이션의 종류는 다음과 같이 세 가지로 나뉜다.

  • 표준(내장) 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
  • 메타 어노테이션 : 어노테이션을 위한 어노테이션
  • 사용자 정의 어노테이션 : 사용자가 직접 정의하는 어노테이션

 

표준 어노테이션

  • @Override : 오버라이딩을 올바르게 했는지 컴파일러가 체크한다. 메서드 이름을 잘못 적는 실수 등을 방지해준다.
  • @Deprecated : 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
  • @FunctionallInterface : 함수형 인터페이스에 붙이면, 함수형 인터페이스의 "하나의 추상메서드만 가져야 한다는 제약"을 확인해준다.
  • @SuppressWarnings : 컴파일러의 경고메세지가 나타나지 않게 한다.

 

메타 어노테이션

메타 어노테이션은 어노테이션을 위한 어노테이션이다.

  • @Target : 어노테이션을 정의할 때 적용 대상을 지정하는 데 사용된다.
  • @Retention. 어노테이션이 유지되는 기간을 지정하는 데 사용된다.
  • @Ingerited : 어노테이션을 자손 클래스에 상속하고자 할 때 사용된다.
  • @Repeatable : 반복해서 붙일 수 있는 어노테이션을 정의할 때 사용된다.

 

어노테이션 정의하기

어노테이션은 다음 코드와 같은 형태로 정의하면 된다.

@interface 이름{
	타입 요소 이름(); // 어노테이션의 요소를 선언
	    ...
}
@interface DateTime{
    String yymmdd();
    String hhmmss();
}

@interface TestInfo{
    int count() default 1;
    String testedBy();
    TestType testType();
    DateTime testDate();
}


@TestInfo{
    testedBy="Kim",
    testTools={"JUnit", "AutoTester"},
    testType=TestType.FIRST,
    testDate=@DateTime(yymmdd="210922", hhmmss="211311")
)// count를 생략했으므로 default인 "count=1"이 적용된다.
public class NewClass{...}

@interface를 사용해 어노테이션을 선언할 것임을 알고, 그 옆에 어노테이션의 이름을 적으면 된다.

어노테이션 선언 과정에서 지켜야 하는 규칙은 다음과 같다.

  • 요소의 타입은 기본형, String, enum, 어노테이션, Class만 허용된다.
  • 괄호()안에 매개변수를 선언할 수 없다.
  • 예외를 선언할 수 없다.
  • 요소의 타입을 매개변수로 정의할 수 없다.(<T>)

 

출처

'Computer Science > Java' 카테고리의 다른 글

JVM의 구조와 JAVA의 실행방식  (1) 2023.04.10
제네릭  (0) 2023.04.10
String, StringBuilder, StringBuffer의 차이  (0) 2023.04.10
동일성과 동등성  (0) 2023.04.10
원시 타입과 참조 타입  (1) 2023.04.10