Java에서 interface와 @interface의 차이점은 무엇입니까?


306

대학에서 90 년대 후반에 JBuilder를 사용한 이후로 Java를 다루지 않았으므로 이번 주에 작은 Java 프로젝트를 작업하고있는 Intellij IDEA를 IDE로 사용하여 어느 정도 속도를 거두었습니다. , 정기적 인 .Net 개발에서 속도의 변화를 위해.

인터페이스와 @interfaces를 추가 할 수 있고 @interface가 무엇이고 일반 인터페이스와 어떻게 다릅니 까?

public interface Test {
}

vs.

public @interface Test {
}

약간의 검색을 수행했지만 @interface를 참조하는 유용한 정보를 많이 찾을 수 없습니다.

답변:


322

@의 기호는 주석 형 정의를 의미한다.

즉, 그것은 것입니다 하지 정말 인터페이스가 아니라 새로운 주석 형은 - 같은 기능 수정으로 사용할 수 @Override .

주제에 대한 이 javadocs 항목 을 참조하십시오 .


7
정말 고마워요. 그래서 @interface라고 부르는 이론적 근거는 무엇보다 @annotation이라고 말해야합니다. 불필요하게 과부하 된 용어처럼 보입니다.
Bittercoder

5
튜토리얼과 JLS는 특수한 종류의 인터페이스 인 주석을 암시합니다. 주제에 대해 많은 논의가없는 것처럼 보이지만 javarunner.blogspot.com/2005/01/annotations-in-java-15.html 은 주석이 주석 인터페이스와 @ 및 인터페이스의 암시 적 확장 이라고 설명합니다. 일반 인터페이스와 함께 차별화하는 데 사용됩니다. 주석에 대한 JSR 스펙을 읽을 수도 있습니다.
DavidValeri

1
문서에서 언급하는 @Bittercoder : "키워드 인터페이스 앞에는 부호 (@)가 붙습니다 (@ = AT, 주석 유형). 그것이 wrt 이름을 찾을 수있는 모든 근거입니다.
Shaishav

111

상호 작용:

일반적으로 인터페이스는 기본 구현 세부 사항을 노출하지 않고 계약을 노출합니다. 객체 지향 프로그래밍에서 인터페이스는 동작을 노출하지만 논리는 포함하지 않는 추상 유형을 정의합니다. 구현은 인터페이스를 구현하는 클래스 또는 유형으로 정의됩니다.

@interface : (주석 유형)

주석이 많은 아래 예제를 보자.

public class Generation3List extends Generation2List {

   // Author: John Doe
   // Date: 3/17/2002
   // Current revision: 6
   // Last modified: 4/12/2004
   // By: Jane Doe
   // Reviewers: Alice, Bill, Cindy

   // class code goes here

}

이 대신 주석 유형을 선언 할 수 있습니다

 @interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   // Note use of array
   String[] reviewers();
}

그러면 다음과 같이 클래스에 주석을 달 수 있습니다.

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   // Note array notation
   reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {

// class code goes here

}

추신 : 많은 주석이 코드의 주석을 대체합니다.

참조 : http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html


11
좋은 설명
Pat B

2
실제로 유용했습니다. Java가 이것을 할 수 있다는 것을 몰랐습니다.
Jay Sidri

이전 답변에는이 정보가 나온 곳의 링크가 포함되어 있습니다. 이 주제에 대한 자세한 정보를 찾는 것이 유용하다는 것을 알았습니다. docs.oracle.com/javase/tutorial/java/annotations/declaring.html
PatS

1
내가 스택 오버 플로우에서 목격 한 최고의 답변 중 하나 (아직 분명).
Mr. D

32

interface키워드는 자바에서 기존의 인터페이스 클래스를 선언하고 있음을 나타냅니다. 키워드는 새로운 주석 형을 선언하는 데 사용됩니다.
@interface

구문에 대한 설명은 주석에 대한 docs.oracle 자습서 를 참조하십시오 . 의미 가 무엇인지 자세히 알고 싶다면 JLS를
참조하십시오 .@interface



8

Java 프로그래밍 언어의 인터페이스 는 클래스가 구현해야하는 동작을 지정하는 데 사용되는 추상 유형입니다. 프로토콜과 비슷합니다. 인터페이스는 interface 키워드를 사용하여 선언됩니다

@interface 는 고유 한 (사용자 정의) Java 주석을 작성하는 데 사용됩니다. 주석은 Java 클래스 또는 인터페이스와 마찬가지로 자체 파일에 정의됩니다. 다음은 사용자 정의 Java 어노테이션 예제입니다.

@interface MyAnnotation {

    String   value();

    String   name();
    int      age();
    String[] newNames();

}

이 예에서는 네 가지 요소가있는 MyAnnotation이라는 주석을 정의합니다. @interface 키워드를 주목하십시오. 이것은 Java 컴파일러에게 이것이 Java 어노테이션 정의임을 알립니다.

각 요소는 인터페이스의 메소드 정의와 유사하게 정의됩니다. 데이터 유형과 이름이 있습니다. 모든 기본 데이터 유형을 요소 데이터 유형으로 사용할 수 있습니다. 배열을 데이터 유형으로 사용할 수도 있습니다. 복잡한 개체는 데이터 형식으로 사용할 수 없습니다.

위의 주석을 사용하려면 다음과 같은 코드를 사용할 수 있습니다.

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {


}

참조 -http : //tutorials.jenkov.com/java/annotations.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.