산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java 애너테이션 타입 종합 가이드: 사전정의, 커스텀, 메타 애너테이션

Java 애너테이션 타입

이 튜토리얼은 Java 애너테이션(사전정의, 커스텀, 메타 애너테이션)을 명확한 예제로 다룹니다.

Java 애너테이션은 소스 코드 요소를 설명하는 메타데이터. Java SE 플랫폼이 표준 애너테이션 세트 제공, 개발자 프로젝트 맞춤 커스텀 생성 가능. 애너테이션도 애너테이션될 수 있어 메타-애너테이션 형성.

애너테이션은 세 범주로 분류:

  1. 사전 정의 애너테이션 – Java 플랫폼 내장.
  2. 커스텀 애너테이션 – 사용자 정의 특수 필요용.
  3. 메타 애너테이션 – 다른 애너테이션에 적용되는 애너테이션.

사전 정의 애너테이션 타입

1. @Deprecated

@Deprecated 마커는 클래스, 메서드, 필드 등 요소가 구식이고 새 대안 있음을 알림. 컴파일러가 사용 시 경고 발행.

문법:

@Deprecated public void oldMethod() { ... }

Javadoc은 문서화용 @deprecated 태그 제공:

/** * @deprecated * Use {@link #newMethod()} instead. */ @Deprecated public void oldMethod() { ... }

예제

class Main { /** * @deprecated * This method is deprecated and has been replaced by newMethod() */ @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } public static void main(String[] args) { deprecatedMethod(); } }

출력

Deprecated method

2. @Override

@Override 애너테이션은 메서드가 슈퍼클래스나 인터페이스 메서드 오버라이딩 의도 표시. 필수 아님지만 시그니처 불일치 등 컴파일 타임 에러 포착.

예제

class Animal { public void display() { System.out.println("I am an animal"); } } class Dog extends Animal { @Override public void display() { System.out.println("I am a dog"); } public void printMessage() { display(); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.printMessage(); } }

출력

I am a dog

3. @SuppressWarnings

이 애너테이션은 컴파일러가 특정 경고 카테고리 무시 지시. 일반 카테고리: deprecation, unchecked.

용법:

@SuppressWarnings("deprecation")

여러 카테고리:

@SuppressWarnings({"deprecation", "unchecked"})

예제

class Main { @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } @SuppressWarnings("deprecation") public static void main(String[] args) { Main depObj = new Main(); depObj.deprecatedMethod(); } }

출력

Deprecated method

4. @SafeVarargs

final, static, private 메서드와 생성자에 적용, @SafeVarargs가 메서드가 varargs 매개변수에 안전하지 않은 연산 수행 안 함 단언. varargs 관련 unchecked 경고 제거.

예제

import java.util.*; class Main { @SafeVarargs private static void displayList(List<String>... lists) { for (List<String> list : lists) { System.out.println(list); } } public static void main(String[] args) { List<String> universityList = Arrays.asList("Tribhuvan University", "Kathmandu University"); List<String> programmingLanguages = Arrays.asList("Java", "C"); displayList(universityList, programmingLanguages); } }

출력

[Tribhuvan University, Kathmandu University] [Java, C]

5. @FunctionalInterface

Java 8 도입, 인터페이스를 함수형 인터페이스(단일 추상 메서드 가진 인터페이스)로 지정. 컴파일러가 이 제약 검증.

예제

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); // 추상 }

두 번째 추상 메서드 추가 시 컴파일 에러:

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); void secondMethod(); // 컴파일 타임 에러 }

여러 default나 static 메서드 허용.

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); default void secondMethod() { /* ... */ } default void thirdMethod() { /* ... */ } }

커스텀 애너테이션

개발자 애플리케이션 특화 요구사항 맞춤 애너테이션 생성 가능. 문법은 @interface 사용, 선택적 기본값 가진 요소 메서드 포함.

문법

@interface AnnotationName { ElementType elementName() default defaultValue; }

예제

@interface MyCustomAnnotation { String value() default "default value"; } class Main { @MyCustomAnnotation(value = "programiz") public void method1() { System.out.println("Test method 1"); } public static void main(String[] args) { new Main().method1(); } }

출력

Test method 1

메타 애너테이션

메타-애너테이션은 다른 애너테이션 행동 구성.

1. @Retention

애너테이션 가시성 범위 정의: SOURCE, CLASS, RUNTIME.

@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }

2. @Documented

생성된 Javadoc에 애너테이션 나타나게 보장.

@Documented public @interface MyAnnotation { }

3. @Target

애너테이션 적용 가능 프로그램 요소 제한.

@Target(ElementType.METHOD) public @interface MyAnnotation { }

요소 타입: ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE.

4. @Inherited

하위 클래스가 슈퍼클래스에 있는 애너테이션 상속 허용.

@Inherited public @interface MyAnnotation { }

5. @Repeatable

같은 요소에 애너테이션 여러 번 적용 허용. 컨테이너 애너테이션 필요.

@Repeatable(Universities.class) public @interface University { String name(); } public @interface Universities { University[] value(); }

용법:

@University(name = "TU") @University(name = "KU") private String uniName;

런타임 애너테이션 데이터 접근은 리플렉션 API getAnnotationsByType() 또는 getAnnotations() 메서드 사용.

java

  1. Java 기본 데이터 타입: 8가지 타입 완벽 가이드와 예제
  2. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  3. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  4. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  5. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  6. Java 애너테이션 타입 종합 가이드: 사전정의, 커스텀, 메타 애너테이션
  7. Java String.charAt() 완전 이해: 문법, 반환타입, 예외, 실전 예제
  8. Java String.endsWith() 마스터: 문자열 접미사 확인 예제
  9. Java 문자열 치환 마스터: replace(), replaceAll(), replaceFirst() 완벽 해설
  10. Java 변수 타입 이해: 종합 가이드