자바 주석


114

Java에서 주석의 목적은 무엇입니까? 나는 그것들이 주석과 실제 코드 사이 어딘가에 있다는 모호한 생각을 가지고 있습니다. 런타임에 프로그램에 영향을 줍니까?

그들의 일반적인 사용법은 무엇입니까?

Java에만 고유합니까? C ++에 상응하는 것이 있습니까?


9
주석으로 정말 사악한 일을 할 수 있습니다. 예를 들어 Spring Framework와 메서드 호출 전에 트랜잭션을 시작하고 예외 / 오류에 대해 롤백하고 성공적인 트랜잭션에 커밋하는 @Transactional 주석을 알고 있다면. 그것은 SOC 원칙 (관심의 분리)을 전적으로지지합니다. 매우 깨끗합니다! 자바 규칙! :-)

1
저에게 3 개의 질문처럼 보입니다. 두 번째는 그 자체가 너무 넓습니다.
Raedwald 2013

구문 별 모든 주석은 인터페이스처럼 보입니다. 그렇다면 컴파일러 또는 JVM이 그 목적을 어떻게 알고 있습니까? 위에서 설명한대로 @ Override-> 메서드가 제대로 재정의되었는지 여부를 확인한다고 가정 해 봅시다. @ Transactional은 트랜잭션 관련 작업을 수행합니다. 이러한 모든 주석에 대해 정의 / 논리를 어디에서 찾을 수 있습니까?
Paramesh Korrakuti 2015 년

답변:


80

주석은 주로 다른 코드를 검사하는 코드에서 사용됩니다. 이들은 동작을 변경하기 위해 런타임에 기존 클래스를 수정 (예 : 장식 또는 래핑)하는 데 자주 사용됩니다. JUnitHibernate 와 같은 프레임 워크는 프레임 워크를 사용하기 위해 직접 작성해야하는 코드의 양을 최소화하기 위해 주석을 사용합니다.

Oracle은 자사 사이트 에 Java의 개념과 의미에 대해 잘 설명 하고 있습니다.


17

또한 Java에만 고유합니까? C ++에 상응하는 것이 있습니까?

아니요,하지만 VB와 C #에는 동일한 속성 이 있습니다.

그들의 사용은 매우 다양합니다. 일반적인 Java 예제 중 하나 @Override는 코드에 영향을주지 않지만 데코 레이팅 된 메서드가 실제로 다른 메서드를 재정의하지 않는 경우 컴파일러에서 경고 (또는 오류)를 생성하는 데 사용할 수 있습니다. 마찬가지로 메서드는 사용되지 않는 것으로 표시 될 수 있습니다.

그런 다음 반사가 있습니다. 코드에 클래스 유형을 반영하면 속성에 액세스하고 거기에있는 정보에 따라 행동 할 수 있습니다. Java의 예제는 모르지만 .NET에서는 컴파일러에서 클래스에 대한 직렬화 정보 를 생성 하고 구조 의 메모리 레이아웃 을 결정하며 레거시 라이브러리에서 함수 가져 오기선언하는 데 사용됩니다 . 또한 IDE 양식 디자이너의 작동 방식을 제어합니다.

/ EDIT : 클래스의 속성은 태그 인터페이스 (예 : Java의 Serializable ) 와 유사합니다 . 그러나 .NET 코딩 지침에서는 태그 인터페이스를 사용하지 말라고합니다. 또한 메서드 수준이 아닌 클래스 수준에서만 작동합니다.


13

Anders는 좋은 요약을 제공하며 여기에 JUnit 주석의 예가 있습니다.

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

여기서 @Test어노테이션은 JUnit에게 flatfileMissing메소드가 실행되어야하는 테스트이고 예상 결과가 throw되었음을 알려줍니다 IOException. 따라서 테스트를 실행할 때이 메서드가 호출 IOException되고이 throw 되는지 여부에 따라 테스트가 통과하거나 실패합니다 .


7

Java에는 주석을 생성 할뿐만 아니라 이러한 주석이 소스 코드에서 작동하는 방식을 결정하는 주석 처리 도구 (apt)도 있습니다.

다음 은 소개입니다.


4

Annotations로 할 수있는 멋진 작업을 보려면 JavaBean 주석 및 주석 프로세서를 확인하십시오 .

코드를 생성하고 빌드 중에 추가 유효성 검사를 추가하는 데 유용하며, 오류 메시지 프레임 워크에도 사용했습니다 (아직 게시되지 않음-상사와 함께 정리해야 함 ...).


1

리터럴 정의에 따라 주석은 요소에 메모를 추가합니다. 마찬가지로 Java 주석은 코드에 대한 자세한 정보를 제공하기 위해 소스 코드에 삽입하는 태그입니다. Java 주석은 정보를 주석이 달린 프로그램 요소와 연관시킵니다. Java 주석 외에도 Java 프로그램에는 일반적으로 소스 코드 파일의 주석에 포함 된 많은 양의 비공식 문서가 있습니다. 그러나 Java 주석은 주석 형식을 설명하기 위해 주석 유형을 사용하여 프로그램 요소에 직접 주석을 추가하는 주석과 다릅니다. Java Annotations는 정보를 처리 도구에서 원활하게 사용할 수 있도록 표준 및 구조화 된 방식으로 표시합니다.

자세히 읽으려면 Java Annotations 에 대한 멋진 자습서가 있습니다.



0

EJB에 관한 주석은 명시 적 미들웨어 접근 방식보다 암시 적 미들웨어 접근 방식을 선택하는 것으로 알려져 있습니다. 주석을 사용할 때 API에서 정확히 필요한 것을 사용자 지정하는 것입니다. 예를 들어 은행 송금을 위해 트랜잭션 메서드를 호출해야합니다. : 주석을 사용하지 않고 : 코드는

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

Annotation을 사용하는 동안 코드에는 미들웨어 서비스를 사용하기위한 번거로운 API 호출이 포함되지 않습니다. 코드는 깨끗하고 비즈니스 로직에 중점을 둡니다.

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.