[Java] @Annotation

황현근·2023년 6월 8일
0

JAVA

목록 보기
1/1
post-thumbnail

@ 자바 어노테이션(Java Annotation)

에노테이션(@)주석이라는 의미를 가진다.
자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용하는데, JDK 1.5 버전 이상에서 사용 가능하다.

🔎 어노테이션의 용도

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

📌 어노테이션 종류

자바 코드에 적용되는 대표적인 내장 어노테이션

  • @Override
    선언한 메서드가 오버라이드 되었다는 것을 나타낸다.
    만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킨다.
class Parent{
   void parentMethod(){}
}
class Child extends Parent{
   void parentmethod(){} // 오버라이딩하려 했으나 실수로 이름을 잘못적음
   // 새로운 메서드가 만들어진 것
}
-------
class Child extends Parent{
//메소드 선언부 앞에 오버라이딩을 하면 위의 문제를 방지할 수 있다.
   @Override
   void parentMethod(){ }
}
  • @SuppressWarnings
    선언한 곳의 컴파일 경고를 무시하도록 한다.
// unchecked 경고를 억제
@SuppressWarnings("unchecked") 
ArrayList list = new ArrayList(); // 지네릭 클래스는 원시타입 쓸 수 없지만, 지정해주지 않음
list.add(obj); // 여기서 경고 발생
  • @FunctionalInterface
    함수형 인터페이스를 지정하는 어노테이션이다.
    만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킨다.
@FunctionalInterface
public interface Runnable{
   public abstract void run(); // 추상메서드
}

🔔 어노테이션 생성하기

어노테이션 생성

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

사용 예시

@interface DateTime{
	String yymmdd();
    String hhmmss();
}

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

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

어노테이션 요소 특징

  • 적용시 값을 지정하지 않으면, 사용될 수 있는 기본값을 지정할 수 있다.(위의 default)
  • 요소가 하나이고 이름이 value일 때는 요소의 이름 생략 가능하다.
  • 요소의 타입이 배열인 경우, 괄호{ }를 사용해야 한다.
    https://velog.io/@jkijki12/annotation

🔑 어노테이션 규칙

어노테이션에도 반드시 지켜주어야 하는 4가지 규칙이 있다.

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

0개의 댓글