English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 흐름 제어

Java 배열

Java 방향 대상(I)

Java 방향 대상(II)

Java 방향 대상(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map 셋

Java Set 셋

Java 입력/출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 어노테이션 (Annotations)

이 튜토리얼에서는 애노테이션의 의미와 다양한 Java 애노테이션, 그리고 사용법을 예제를 통해 배우겠습니다.

Java 애노테이션은 프로그램 소스 코드의 메타데이터(데이터에 대한 데이터)입니다.

애노테이션은 컴파일된 프로그램의 실행에 영향을 미치지 않는 프로그램에 대한 추가 정보를 컴파일러에 제공합니다.

애노테이션은 @로 시작합니다. 문법은 다음과 같습니다:

@AnnotationName

@Override 애노테이션을 예로 들어보겠습니다.

@Override 애노테이션은 애노테이션으로 표시된 메서드가 부모 클래스의 메서드를同名으로, 동일한 리턴 타입과 파라미터 목록으로 오버라이딩된 메서드를 지정합니다.

메서드를 다시 작성할 때는 @Override를 사용할 필요가 없습니다. 하지만, 사용하면 컴파일러는 오류가 발생할 경우(예: 잘못된 파라미터 타입) 오류를 보여줍니다.

예제1:@Override 주석 예제

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

출력 결과

I am a dog.

이 예제에서 메서드 displayInfo()는 부모 클래스 Animal과 자식 클래스 Dog에서 모두 존재합니다. 메서드를 호출할 때, 부모 클래스의 메서드 대신 자식 클래스의 메서드가 호출됩니다.

주석 구조

주석은 요소(멤버/속성/파라미터)。

1.표시 주석

표시 주석은 멤버를 포함하지 않습니다/요소. 그것은 선언을 표시하는 데 사용됩니다.

그语法은 다음과 같습니다:

@AnnotationName()

이러한 주석은 요소를 포함하지 않기 때문에 괄호가 필요하지 않습니다. 예를 들어,

@Override

2.단 요소 주석

단 요소 주석은 단일 요소만을 포함합니다.

그语法은 다음과 같습니다:

@AnnotationName(elementName = "elementValue")

요소가 하나밖에 없을 때, 일반적으로 요소를 value로 이름을 지정합니다.

@AnnotationName(value = "elementValue")

이 경우, 요소 이름을 제거할 수도 있습니다. 기본적으로 요소 이름은 value입니다.

@AnnotationName("elementValue")

3.다 요소 주석

이러한 주석은 쉼표로 구분된 여러 요소를 포함할 수 있습니다.

그语法은 다음과 같습니다:

@AnnotationName(element1 = "value1", element2 = "value2")

주석 위치

모든 선언은 Java에서 선언 위에 두어 주석을 추가하여 표시할 수 있습니다. 8부터, 주석은 타입 전에도 위치할 수 있습니다.

1.선언 문 위에

위와 같이 Java 주석은 클래스, 메서드, 인터페이스, 필드 등 다양한 프로그램 요소 선언의 위에 위치할 수 있습니다.

예제2:@SuppressWarnings 주석 예제

import java.util.*;
class Main {
  @SuppressWarnings("unchecked")
  static void wordsList() {
    ArrayList wordList = new ArrayList<>();
    //이는 검사되지 않은 경고로 이어질 수 있습니다
    wordList.add("w"}3codebox"); 
    System.out.println("Word list => " + wordList);
  }
  public static void main(String args[]) {
    wordsList();
  }
}

출력 결과

Word list => [w3codebox]

위 프로그램이 @SuppressWarnings("unchecked") 어노테이션을 사용하지 않고 컴파일된다면, 컴파일러는 프로그램을 컴파일하지만 다음과 같은 경고를 줄 것입니다:

Main.java는 확인되지 않은 또는 안전하지 않은 연산을 사용합니다.
Word list => [w3codebox]

저희는 경고를 받습니다

Main.java는 확인되지 않은 또는 안전하지 않은 연산을 사용합니다

이는 아래의 문장 때문입니다.

ArrayList wordList = new ArrayList<>();

이는 우리가 배열 목록의 일반 타입을 정의하지 않았기 때문입니다. 이 경고를 해결하기 위해 괄호 <> 안에 일반화된 타입을 지정할 수 있습니다.

ArrayList<String> wordList = new ArrayList<>();

2.타입 주석

Java 8이전에는 주석은 선언에만 적용할 수 있었습니다. 지금은 타입 주석도 사용할 수 있습니다. 이는 타입을 사용하는任何 곳에 어노테이션을 두고 있는 것과 같다는 의미입니다.

생성자 호출

new @Readonly ArrayList<>()

타입 정의

@NonNull String str;

이 선언은 String 타입의 비어있지 않은 변수 str를 지정하여 NullPointerException을 피합니다.

@NonNull List<String> newList;

이 선언은 String 타입의 비어있지 않은 목록을 지정합니다.

List<@NonNull String> newList;

이 선언은 String 타입의 비어있지 않은 값의 목록을 지정합니다.

타입 변환
newStr = (@NonNull String) str;

extends와 implements 절

class Warning extends @Localized Message

throws

public String readMethod() throws @Localized IOException

타입 주석은 Java 코드가 더 나은 분석을 받을 수 있도록 하고, 더 강력한 타입 검사를 제공합니다.

аннотации типа

1. предопределенные аннотации

  1. @Deprecated

  2. @Override

  3. @SuppressWarnings

  4. @SafeVarargs

  5. @FunctionalInterface

2. 메타 주석

  1. @Retention

  2. @Documented

  3. @Target

  4. @Inherited

  5. @Repeatable

3. 사용자 정의 주석

이러한 주석 타입은Java 주석 타입튜토리얼에서 자세히 설명됩니다.

주석 사용

  • 컴파일러 지시 - 컴파일러에 지시를 제공하거나 오류를 검출하거나 경고를 차단할 수 있는 기능을 포함합니다. 예를 들어, 내장된 주석 @Deprecated, @Override, @SuppressWarnings.

  • 컴파일 시 지시 - 이러한 주석은 컴파일 시에 소프트웨어 빌더 도구가 코드, XML 파일 등을 생성하는 데 도움이 되는 컴파일 시 지시를 제공합니다.

  • 실행 시 지시 - 실행 시에 프로그램에 지시를 제공하기 위해 일부 주석을 정의할 수 있습니다. 이러한 주석은 Java 반영자를 사용하여 접근됩니다.