728x90

프로그래밍 언어에 영향을 미치지 않고 유용한 정보를 제공하는 기능

표준 애너테이션

// 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함
@Override

// 앞으로 사용하지 않을 것을 권장하는 필드나 메서드를 정할 때
@Deprecated

// 함수형 인터페이스가 컴파일러가 올바르게 작성했는지 체크하게 함
// 함수형 인터페이스가 하나의 추상메소드만 가져야 하는 제약을 지킨지 확인
@FunctionalInterface

// 컴파일러의 경고메시지가 나타나지 않게 억제
// 이미 확인한 경고를 다시 확인하지 않기 위해
@SuppressWarinings(억제하고자 하는 경고의 종류를 문자열로 지정)
@SuppressWarinings({경고1,경고2,경고3})

메타 애너테이션

애너테이션을 만들 때 사용하는 애너테이션

// 애너테이션을 정의할 때, 애너테이션을 어느 곳에 적용할 수 있는지 지정할 때
@Target

// 애너테이션이 언제까지 유지되는지 기간을 정할 때 사용
@Retention

// javadoc으로 작성한 문서에 포함 시킬 때
@Documented

// 애너테이션을 자손 클래스에 상속하고자 할 때
@Inherited

// 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable

애너테이션 정의하기

// 애너테이션을 직접 생성할 수 있음
@interface 애너테이션명 {
	타입 요소명();
    추상 메소드 // 애니테이션의 메소드는 추상메소드임
}

// 적용할 때 값을 지정해서 사용
@interface 애너테이션명 {
	타입 요소명 = 값;
    추상 메소드
}

// 적용시 값을 지정하지 않으면 null을 제외한 기본값 지정 가능
// 요소가 하나만 존재하고 요소명이 value인 경우 요소명 생략가능
// 요소의 타입이 배열인 경우는 중괄호를 사용하고 값이 없을 때도 빈중괄호를 써야함

애너테이션의 조상

Annotation은 모든 애너테이션의 조상이지만 클래스가 아닌 인터페이스임

마커 애너테이션

요소가 하나도 정의되지 않은 애너테이션

애너테이션 요소의 규칙

  • 요소의 타입은 상수, 기본형, String, enum, 애너테이션, Class만 허용
  • 괄호 안에 매개변수 선언 불가능
  • 예외 선언 불가능
  • 요소를 <T>(타입 매개변수)로 정의할 수 없음

 

'Java > Notion' 카테고리의 다른 글

Lambda  (0) 2023.05.03
Thread  (0) 2023.05.02
열거형(Enum)  (0) 2023.05.01
Generics  (0) 2023.05.01
컬렉션 프레임워크 - Collections 클래스  (0) 2023.05.01

+ Recent posts