source

Java에서 주석의 사용방법과 사용처

goodcode 2022. 7. 30. 19:14
반응형

Java에서 주석의 사용방법과 사용처

주석을 사용할 수 있는 주요 영역은 무엇입니까?이 기능은 XML 기반 구성을 대체하는 것입니까?

주석은 다른 메타 개체를 설명하는 데 사용할 수 있는 메타 메타 개체입니다.메타 오브젝트는 클래스, 필드 및 메서드입니다.오브젝트에 메타 오브젝트 요청(예:anObj.getClass())를 자기성찰이라고 합니다.자기성찰은 더 나아가 메타 오브젝트에 주석이 무엇인지 물어볼 수 있다(예:aClass.getAnnotations) 자기성찰과 주석은 리플렉션과 메타프로그래밍이라고 불리는 것에 속합니다.

주석을 유용하게 쓰려면 어떤 식으로든 해석해야 합니다.주석은 개발 IDE 또는 컴파일러에 의해 해석되거나 런타임에 프레임워크에 의해 해석될 수 있습니다.

주석 처리는 매우 강력한 메커니즘으로 다음과 같은 다양한 방법으로 사용할 수 있습니다.

  • 요소의 제약 또는 사용법을 설명합니다(예:@Deprecated, @Override , 「」@NotNull
  • '성질'을 '은 '성질'을 표현합니다.@Entity, @TestCase, @WebService
  • 요소의 동작을 설명합니다.@Statefull, @Transaction
  • 처리 는, 을 참조해 주세요.@Column, @XmlElement

모든 경우 주석을 사용하여 요소를 설명하고 그 의미를 명확히 합니다.

JDK5 이전에는 주석으로 표현된 정보를 다른 곳에 저장해야 했고 XML 파일이 자주 사용되었습니다.단, 주석은 Java 코드 자체에 속하기 때문에 XML보다 훨씬 조작하기 쉽기 때문에 주석을 사용하는 것이 편리합니다.

주석 사용:

  • 문서(XDoclet 등)
  • 컴파일
  • IDE
  • 테스트 프레임워크(JUnit 등)
  • IoC 컨테이너(예: 스프링)
  • 시리얼라이제이션(XML 등
  • AOP(Aspect-Oriented Programming) (Spring AOP 등)
  • 애플리케이션 서버(예: EJB 컨테이너, 웹 서비스)
  • 객체 관계 매핑(ORM) (예: 휴지 상태, JPA)
  • 그리고 더 많은...

...예를 들어 주석을 사용하여 생성 방법을 정의하는 Lombok 프로젝트를 살펴보십시오.equals ★★★★★★★★★★★★★★★★★」hashCode★★★★★★★★★★★★★★★★★★.

Java 주석에는 여러 응용 프로그램이 있습니다.우선 컴파일러(또는 컴파일러 확장)에 의해 사용될 수 있습니다.를 들어 Override 주석:

class Foo {

    @Override public boolean equals(Object other) {
        return ...;
    }
}

이것은 Java JDK에 포함되어 있습니다.컴파일러는 기본 클래스에서 상속된 메서드를 덮어쓰지 않는 메서드에 태그가 지정된 경우 오류를 시그널링합니다.이 주석은 실제로 메서드를 덮어쓸 예정이지만 덮어쓸 메서드의 시그니처와 일치하지 않기 때문에 일반적인 실수를 피하기 위해 도움이 될 수법에 지정된 시그니처는 덮어쓸 메서드의 시그니처와 일치하지 않습니다.

class Foo {

    @Override public boolean equals(Foo other) {  // Compiler signals an error for this one
        return ...;
    }
}

JDK7 에서는, 어떠한 타입에서도 주석을 사용할 수 있습니다.이 기능은 다음과 같은 Not Null 등의 컴파일러 주석에서 사용할 수 있습니다.

public void processSomething(@NotNull String text) {
    ...
}

이를 통해 컴파일러는 변수 및 값의 부적절한/잘못된 사용에 대해 경고할 수 있습니다.

주석을 위한 또 다른 고급 애플리케이션에는 런타임에 반사 및 주석 처리가 포함됩니다.주석을 "XML 기반 구성 대체"라고 할 때 염두에 둔 내용입니다.이는 예를 들어 다양한 프레임워크 및 JCP 표준(영속성, 의존성 주입, 이름 지정)에서 필요한 메타데이터 및 구성 정보를 제공하기 위해 사용되는 주석 처리의 일종입니다.

주석은 Java 소스 파일에 추가된 메타데이터(데이터에 대한 데이터)의 한 형태입니다.클라이언트 코드 통합을 단순화하기 위해 프레임워크에서 주로 사용됩니다.몇 가지 실제 사례를 머릿속에서 바로 들 수 있습니다.

  • 4 - JUnit 4 - 를 추가합니다.@TestJUnit Runner 。테스트 설정과 관련된 추가 주석도 있습니다(예:@Before ★★★★★★★★★★★★★★★★★」@BeforeClassJUnit Runner는 JUnit Runner입니다.할 수 되는 경우가 를 들면, 리플렉션 기능을 할 수 ).(XML 의 )에 가까운 도 있습니다. 또한 주석 기능은 참조하는 코드에 더 가깝습니다.@Test주석은 테스트 방법 직전에 있으므로 이 방법의 목적은 명확하며 문서로도 사용됩니다).반면 XML 구성은 주석보다 훨씬 더 복잡하고 더 많은 데이터를 포함할 수 있습니다.

  • Teracotta - XML을 사용합니다.를 들면, 「」는,@Root주석은 Teracotta 런타임에 주석 필드가 루트이며 VM 인스턴스 간에 해당 메모리를 공유해야 함을 알려줍니다.XML 구성 파일은 서버를 구성하고 계측할 클래스를 지정하는 데 사용됩니다.

  • - 를 들어 Guice - 를를,, ,, 、@Inject주석 - 생성자에 적용될 때 Guice 런타임에서 정의된 인젝터를 기반으로 각 파라미터의 값을 찾습니다.@Inject주석은 XML 구성 파일을 사용하여 복제하는 것이 매우 어려우며 주석은 참조하는 생성자에 매우 가깝습니다(설정한 모든 종속성 주입을 찾기 위해 거대한 XML 파일을 검색해야 하는 경우를 상상해 보십시오).

다양한 프레임워크에서 주석이 어떻게 사용되는지 보여드렸으면 합니다.

Java에서 주석을 사용하면 클래스, 필드 및 메서드를 설명할 수 있습니다.기본적으로 이들은 Java 소스 파일에 추가된 메타데이터의 한 형태이므로 프로그램의 의미에 직접 영향을 줄 수 없습니다.그러나 Reflection을 사용하여 런타임에 주석을 읽을 수 있으며 이 프로세스를 Introspection이라고 합니다.그런 다음 클래스, 필드 또는 메서드를 수정하는 데 사용할 수 있습니다.

이 기능은 많은 경우 Libraries & SDK(hibernate, JUnit, Spring Framework)에 의해 이용되며, 이러한 Libraries 또는 SDK를 사용하기 위해 프로그래머가 실행하는 코드 수를 줄이거나 단순화할 수 있습니다.따라서 주석과 성찰은 Java에서 함께 작업한다고 말하는 것이 적절합니다.

또한 주석의 가용성을 컴파일 시간 또는 런타임으로 제한할 수 있습니다.다음은 사용자 지정 주석 작성에 대한 간단한 예입니다.

Driver.java

package io.hamzeen;

import java.lang.annotation.Annotation;

public class Driver {

    public static void main(String[] args) {
        Class<TestAlpha> obj = TestAlpha.class;
        if (obj.isAnnotationPresent(IssueInfo.class)) {

            Annotation annotation = obj.getAnnotation(IssueInfo.class);
            IssueInfo testerInfo = (IssueInfo) annotation;

            System.out.printf("%nType: %s", testerInfo.type());
            System.out.printf("%nReporter: %s", testerInfo.reporter());
            System.out.printf("%nCreated On: %s%n%n",
                    testerInfo.created());
        }
    }
}

테스트 Alpha.java

package io.hamzeen;

import io.hamzeen.IssueInfo;
import io.hamzeen.IssueInfo.Type;

@IssueInfo(type = Type.IMPROVEMENT, reporter = "Hamzeen. H.")
public class TestAlpha {

}

IssueInfo.java

package io.hamzeen;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author Hamzeen. H.
 * @created 10/01/2015
 * 
 * IssueInfo annotation definition
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface IssueInfo {

    public enum Type {
        BUG, IMPROVEMENT, FEATURE
    }

    Type type() default Type.BUG;

    String reporter() default "Vimesh";

    String created() default "10/01/2015";
}

XML 기반 구성을 대체합니까?

완전히는 아니지만 코드 구조에 가까운 구성(예: JPA 매핑 또는 봄의 종속성 주입)은 주석으로 대체될 수 있으며, 그 후 보통 훨씬 덜 장황하고 성가시고 고통스럽다.대부분의 주목할 만한 프레임워크가 이 스위치를 만들었습니다만, 통상은 오래된 XML 설정이 옵션으로 남아 있습니다.

주석에는 2개의 뷰가 있습니다.

  1. 사용자 보기, 대부분의 경우 주석은 단축키처럼 작동하거나 키 스트로크를 저장하거나 프로그램을 더 잘 읽을 수 있도록 합니다.

  2. 벤더 뷰, 프로세서의 주석 뷰는 가벼운 무게의 '인터페이스'에 가깝습니다.프로그램은 SOMTING에 직면하지만 특정 인터페이스를 명시적으로 "실장"하지 않습니다(여기서는 주석이라고 합니다).

예를 들어 jpa에서는 다음과 같은 것을 정의합니다.

@Entity class Foo {...}

대신

class Foo implements Entity {...}

둘 다 "Foo is a Entity class"라는 같은 말을 합니다.

주석을 사용할 수 있는 위치

선언: 클래스 선언, 필드, 메서드 및 기타 프로그램 요소에 주석을 적용할 수 있습니다.선언에 사용할 경우 각 주석은 관례상 자체 행에 나타나는 경우가 많습니다.

Java SE 8 Update: 유형 사용에도 주석을 적용할 수 있습니다.다음은 몇 가지 예입니다.

  • 클래스 인스턴스 생성 식:

    new @Interned MyObject();

  • 유형 캐스트:

    myString = (@NonNull String) str;

  • implements 절:

    class UnmodifyList는 @Readonly List <@Readonly T> { ...를 구현합니다.}

  • 예외 선언이 느려졌습니다.

    보이드 모니터Temperature()가 @Critical Temperature를 슬로우합니다.예외 {...}

Hibernate와 같은 프레임워크는 많은 구성/매핑이 필요하며 Annotations는 많이 사용합니다.

휴지 상태 주석 보기

(Java EE 5의) JPA는 주석의 과도한 사용의 훌륭한 예입니다.Java EE 6은 또한 RESTful Webservices와 같은 많은 새로운 영역에 주석을 도입할 예정입니다.이러한 새로운 서블릿 API는 각 서블릿 API 아래에 있습니다.

다음은 몇 가지 리소스입니다.

주석으로 대체되는 구성 세부 사항뿐만 아니라 동작을 제어하는 데도 사용할 수 있습니다.Java EE 6의 JAX-RS 예제를 보면 알 수 있습니다.

메서드, 클래스 또는 필드 수준에서 클래스와 그다지 관련이 없는 클래스에 주석을 달 때 유용합니다.

특정 클래스를 테스트 전용으로 표시하는 데 사용되는 고유한 주석을 가질 수 있습니다.이는 단순히 문서화를 목적으로 하는 것일 수도 있고 실제 릴리스 후보를 컴파일할 때 필터링하여 적용할 수도 있습니다.

주석을 사용하여 플러그인 프레임워크와 같은 일부 메타 데이터를 저장할 수 있습니다(예: 플러그인 이름).

그것은 단지 또 다른 도구일 뿐이고, 많은 목적을 가지고 있다.

외부 구성 파일 대신 주석을 사용할 수 있지만 완전한 대체로 간주할 수는 없습니다.Hibernate, JPA, EJB 3 및 Java EE에 포함된 거의 모든 기술과 같은 구성 파일을 대체하기 위해 annotationi가 사용된 많은 예를 볼 수 있습니다.

어쨌든 이것은 항상 좋은 선택은 아니다.컨피규레이션파일을 사용하는 목적은 통상, 애플리케이션이 실행되고 있는 환경의 상세로부터 코드를 분리하는 것입니다.이러한 상황에서, 그리고 대부분의 경우 Configuration을 사용하여 응용 프로그램을 외부 시스템 구조에 매핑하는 경우, 주석 기능은 응용 프로그램의 소스 코드 안에 외부 시스템의 세부 정보를 포함하도록 하기 때문에 Configuration파일을 대체하는 좋은 방법은 아닙니다.여기서 외부 파일은 최선의 선택으로 간주됩니다.그렇지 않으면 소스 코드를 수정하고 실행 환경에서 관련 세부 정보를 변경할 때마다 다시 컴파일해야 합니다.

주석은 소스 코드를 컴파일 시 및 실행 시 모두 처리 도구에 특별한 방식으로 클래스 및 클래스 구조를 처리하도록 지시하는 추가 정보로 장식하는 데 훨씬 적합합니다. @Override JUnit and@Test는 이러한 사용법의 좋은 예입니다.다른 답변에서 이미 자세히 설명되어 있습니다.

결국 규칙은 항상 동일합니다. 소스에 따라 변화하는 것은 소스에 따라 내부에 보관하고 소스와 독립적으로 변화하는 것은 소스에 따라 외부에 보관합니다.

(a) 컴파일러 체크 또는 (b) 코드 분석을 통해 코드에 대한 추가 정보를 첨부합니다.

**

  • 다음은 삽입 주석입니다.: 2가지 유형

**

유형 1) Java 코드에 적용되는 주석:

@Override // gives error if signature is wrong while overriding.
Public boolean equals (Object Obj) 

@Deprecated // indicates the deprecated method
Public doSomething()....

@SuppressWarnings() // stops the warnings from printing while compiling.
SuppressWarnings({"unchecked","fallthrough"})

유형 2) 다른 주석에 적용되는 주석:

@Retention - Specifies how the marked annotation is stored—Whether in code only, compiled into the class, or available at run-time through reflection.

@Documented - Marks another annotation for inclusion in the documentation.

@Target - Marks another annotation to restrict what kind of java elements the annotation may be applied to

@Inherited - Marks another annotation to be inherited to subclasses of annotated class (by default annotations are not inherited to subclasses).

**

  • 사용자 지정 주석:

** http://en.wikipedia.org/wiki/Java_annotation#Custom_annotations


자세한 내용은 아래 링크를 참조하십시오.예를 들어 설명하다


http://www.javabeat.net/2007/08/annotations-in-java-5-0/

다음은 주석을 사용할 수 있는 몇 가지 장소입니다.

a. Annotations can be used by compiler to detect errors and suppress warnings
b. Software tools can use annotations to generate code, xml files, documentation etc., For example, Javadoc use annotations while generating java documentation for your class.
c. Runtime processing of the application can be possible via annotations.
d. You can use annotations to describe the constraints (Ex: @Null, @NotNull, @Max, @Min, @Email).
e. Annotations can be used to describe type of an element. Ex: @Entity, @Repository, @Service, @Controller, @RestController, @Resource etc.,
f. Annotation can be used to specify the behaviour. Ex: @Transactional, @Stateful
g. Annotation are used to specify how to process an element. Ex: @Column, @Embeddable, @EmbeddedId
h. Test frameworks like junit and testing use annotations to define test cases (@Test), define test suites (@Suite) etc.,
i. AOP (Aspect Oriented programming) use annotations (@Before, @After, @Around etc.,)
j. ORM tools like Hibernate, Eclipselink use annotations

주석에 대한 자세한 내용은 이 링크를 참조하십시오.

링크를 참조하여 주석을 사용하여 간단한 테스트 스위트를 작성하는 방법을 확인할 수 있습니다.

Java EE 5는 XML 구성보다 주석 사용을 선호합니다.예를 들어 EJB3에서 EJB 방법의 트랜잭션 속성은 주석을 사용하여 지정됩니다.이들은 인터페이스의 구현을 요구하는 대신 주석을 사용하여 POJO를 EJB로 표시하고 특정 방법을 라이프사이클 방식으로 지정하기도 합니다.

언급URL : https://stackoverflow.com/questions/1372876/how-and-where-are-annotations-used-in-java

반응형