애너테이션(Annotation)

정민교·2022년 9월 15일
0

애너테이션

특정 코드를 사용하는 프로그램에게 정보를 전달하는 역할

주석과 다른점

주석은 정보 제공의 대상이 사람임.
애너테이션은 주석과 마찬가지로 정보 전달의 목적을 가지는 점에서 동일하지만 정보 전달의 대상이 다르다는 차이점이 있음

주석은 코드를 설명하는 정보를 제공하는 역할을 한다.
개발자(보통 협업 시)가 코드를 빠르고 직관적으로 코드를 이해할 수 있도록 돕는다.

애너테이션의 역할과 종류

애너테이션 역할

  • 컴파일러에게 문법 에러를 체크하도록 정보를 제공
  • 프로그램 빌드 시 코드를 자동으로 생성할 수 있도록 정보를 제공
  • 런타임에 특정 기능을 실행하도록 정보를 제공

애너테이션 종류

  • 표준 애너테이션 : 자바에서 기본으로 제공하는 애너테이션
표준 애너테이션설명
@Override컴파일러에게 해당 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드라는 것을 알림.
@Deprecated앞으로 사용하지 않을 대상임을 알림.
@SuppressWarnings컴파일러의 특정 경고메세지를 나타나지 않게 해줌
@FuntionalInterface함수형 인터페이스라는 것을 알림
@SafeVarargs제네릭 타입의 가변인자에 사용
  • 메타 애너테이션 : 애너테이션을 정의하는 데 사용
메타 이너테이션설명
@Target애너테이션을 정의할 때 적용 대상을 지정하는데 사용
@Dcoumented애너테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.
@Inherited애너테이션이 하위클래스에 상속되도록 한다.
@Retention애너테이션이 유지되는 기간을 정한다.
@Repeatable애너테이션을 반복해서 적용한다.

* 사용자 정의 애너테이션: 사용자가 직접 정의한 애너테이션
나중에 알아보자

표준 애너테이션

자바에서 기본으로 제공하는 애너테이션

@Override

해당메서드와 동일한 이름의 메서드가 상위클래스에 존재하지 않으면 컴파일러가 에러를 발생시킴
즉 오버라이딩이 잘 안될 때 에러를 발생시킴

class SubClass extends SuperClass {
	@Override
    void overMethod {} // 상위클래스에 이 메서드 없으면 컴파일러가 오류를 발생시킴

@Deprecated

새로운 것으로 대체되었으니 더이상 사용하지 않을 것을 권장

만약 작성한 소스파일 중 @Deprecated가 붙은 필드 혹은 메서드를 사용한다면 컴파일시 메세지가 나타난다.

Note: 파일명.java uses or overrides a deprecated API.
Note: Recomplie with -Xlint:deprecation for details.

-Xlint:deprecation옵션을 붙여서 다시 컴파일하면 더 자세한 내용 확인이 가능

@FunctionalInterface

함수형 인터페이스가 올바르게 선언되지 않았으면 에러 발생시킴

함수형 인터페이스는 추상 메서드가 하나만 있어야하는 제약이 있음

@SuppressWarnings

컴파일 경고 메세지가 나타나지 않도록 함

경고 메세지가 발생할 것을 알면서도 묵인해야 할 때 사용
@SuppressWarnings("all) 처럼 억제하려는 경고메세지 종류를 괄호안에 문자열로 지정한다.

애너테이션설명
@SuppressWarings(”all”)모든 경고를 억제
*@SuppressWarings(”deprecation”)Deprecated 대상을 사용한 경우 나오는 경고 억제
@SuppressWarings(”fallthrough”)switch문에서 break 구문이 없을 때 경고 억제
@SuppressWarings(”finally”)finally 관련 경고 억제
@SuppressWarings(”null”)null 관련 경고 억제
*@SuppressWarings(”unchecked”)검증되지 않은 연산자 관련 경고 억제
@SuppressWarings(”unused”)사용하지 않는 코드 관련 경고 억제
@SuppressWarning("rawtypes")제네릭을 사용하지 않아서 발생하는 경고 억제
@SuppressWarning("varargs")가변인자으 ㅣ타입이 제네릭일 때 발생하는 경고를 억제

메타 애너테이션

애너테이션을 위한 애너테이션, 애너테이션을 정의하는데 사용

@Target

애너테이션을 적용할 대상을 지정

대상 타입적용범위
ANNOTATION_TYPE애너테이션
CONSTRUCTOR생성자
FIELD필드(멤버변수, 열거형 상수)
LOCAL_VARIABLE지역변수
METHOD메서드
PACKAGE패키지
PARAMETER매개변수
TYPE타입(클래스, 인터페이스, 열거형)
TYPE_PARAMETER타입 매개변수
TYPE_USE타입이 사용되는 모든 대상

@Inherited

하위클래스가 애너테이션을 상속, 하위 클래스도 상위 클래스에 붙은 애너테이션이 동일하게 적용된다.

@Retention

애너테이션의 지속 기간을 결정

@Repeatable

애너테이션을 여러 번 반복해서 사용 가능

profile
백엔드 개발자

0개의 댓글