자바 주석
Java에서 주석의 목적은 무엇입니까?나는 그들이 댓글과 실제 코드 사이의 어딘가에 있다는 애매한 생각을 가지고 있다.실행 시 프로그램에 영향을 미칩니까?
일반적인 용도는 무엇입니까?
Java에만 해당됩니까?C++에 상당하는 것이 있습니까?
주석은 주로 다른 코드를 검사하는 코드에서 사용됩니다.동작 변경을 위해 런타임에 기존 클래스를 수정(예: 장식 또는 래핑)하는 데 자주 사용됩니다.JUnit 및 Hibernate 등의 프레임워크에서는 주석을 사용하여 프레임워크를 사용하기 위해 사용자가 직접 작성해야 하는 코드의 양을 최소화합니다.
Oracle은 해당 사이트의 Java에서 개념과 의미에 대해 잘 설명하고 있습니다.
또한 Java에 고유한 C++가 있습니까?
아니요. 단, VB와 C#에는 같은 속성이 있습니다.
용도가 꽤 다양합니다.의 대표적인 예로는 Java가 .@Override
는 코드에 영향을 주지 않지만, 장식된 메서드가 실제로 다른 메서드를 덮어쓰지 않을 경우 컴파일러가 경고(또는 오류)를 생성하기 위해 사용할 수 있습니다.마찬가지로 메서드는 사용되지 않는 것으로 표시될 수 있습니다.
그리고 반사가 있습니다.코드에 클래스 유형을 반영하면 속성에 액세스하여 해당 정보에 따라 작업할 수 있습니다.자바어 이외의 예는 모릅니다.NET 컴파일러는 클래스의 시리얼화 정보를 생성(탈)하고, 구조의 메모리 레이아웃을 결정하고, 레거시 라이브러리(특히)로부터의 함수 Import를 선언하기 위해 사용합니다.또한 IDE 양식 디자이너의 작동 방식도 제어합니다.
/EDIT: 클래스의 속성은 태그 인터페이스와 비슷합니다(Java의 Serializable 등).하지만, 그.NET 코딩 가이드라인에서는 태그인터페이스를 사용하지 않도록 되어 있습니다.또한 메서드 레벨이 아닌 클래스 레벨에서만 작동합니다.
앤더스는 좋은 요약을 제공하고, 여기 JUnit 주석의 예가 있습니다.
@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
★★★★★★★★★★★★★★★★★★.@Test
에 JUnit이 있다는 을 알려주는 입니다.flatfileMissing
입니다.IOException
때이가 테스트에 반영됩니다.IOException
집니니다
Java에는 주석 처리 도구(apt)도 있습니다.이 도구에서는 주석을 작성할 뿐만 아니라 이러한 주석이 소스 코드에서 어떻게 동작하는지도 결정합니다.
여기 소개가 있습니다.
주석으로 할 수 있는 멋진 작업을 보려면 JavaBean 주석 및 주석 프로세서를 확인하십시오.
코드 생성에 매우 적합하며 빌드 중에 추가 검증을 추가할 수 있습니다.또, 에러 메세지 프레임워크에도 사용하고 있습니다(아직 공개되지 않았습니다.상사에게 확실히 해 둘 필요가 있습니다).
문자 그대로의 정의에 따라 주석은 요소에 주석을 추가합니다.마찬가지로 Java 주석은 코드에 대한 자세한 정보를 제공하기 위해 소스 코드에 삽입하는 태그입니다.Java 주석은 주석이 달린 프로그램 요소와 정보를 연관시킵니다.Java 주석 외에도 Java 프로그램에는 일반적으로 소스 코드 파일의 주석 내에 포함된 비공식 문서가 많이 있습니다.그러나 Java 주석은 주석의 형태를 설명하기 위해 주석 유형을 사용하여 프로그램 요소에 직접 주석을 다는 주석과는 다릅니다.Java Annotations는 정보를 표준적이고 구조화된 방식으로 표시하므로 처리 도구에서 쉽게 사용할 수 있습니다.
Java의 @Override 주석을 사용하는 시기와 이유는 무엇입니까?이 링크는 오버라이드 주석(@override)을 사용해야 하는 시기에 대한 질문을 참조합니다.이것은 주석의 개념을 더 잘 이해하는 데 도움이 될 수 있습니다.확인하세요.
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
}
주석을 사용하는 동안 코드에는 미들웨어 서비스를 사용하기 위한 번거로운 API 호출이 포함되어 있지 않습니다.코드는 명확하고 비즈니스 논리에 초점을 맞추고 있습니다.
transfer(Account account1, Account account2, long amount)
{
// 1: Subtract the balance from one account, add to the other
}
주석을 처음 접하는 사람이 주석을 묻는 첫 번째 질문은 "주석이란 무엇인가?"입니다.이 질문에 대한 답은 없는 것으로 판명되었습니다.다양한 종류의 Java 주석에는 공통적인 동작이 존재하지 않습니다.다시 말해, 그들을 추상적인 개념 그룹으로 묶는 것은 모두 "@" 기호로 시작한다는 사실 외에는 없다.
예를 들어 @Override 주석이 있습니다.이 주석에서는 컴파일러가 이 멤버함수가 부모 클래스의 멤버함수를 덮어쓰는지 체크하도록 지시합니다.@Target 주석이 있습니다.이것은 사용자 정의 주석(다른 주석과 공통되는 것이 없는 세 번째 유형의 구성)을 연결할 수 있는 객체의 종류를 지정하는 데 사용됩니다.이들은 @ 기호로 시작하는 것 외에는 서로 관계가 없습니다.
기본적으로 자바 언어 정의의 유지를 담당하는 일부 위원회가 자바 언어에 새로운 키워드를 추가하는 것을 게이트키퍼로 하고 있기 때문에 다른 개발자들은 새로운 키워드를 주석이라고 부르며 이를 위해 최종 실행을 하고 있는 것으로 보입니다.그래서 주석이란 일반적으로 이해하기 어려운 것입니다.왜냐하면 주석들을 개념적인 그룹에 넣기 위해 사용할 수 있는 모든 주석을 연결하는 공통적인 특징이 없기 때문입니다.즉, 개념으로서의 주석은 존재하지 않습니다.
따라서 저는 모든 종류의 주석의 동작을 개별적으로 연구할 것을 권장합니다.다른 종류의 주석을 이해해서 다른 주석에 대해 알기를 기대하지 마십시오.
이 질문에 대한 다른 답변의 대부분은 사용자가 특별히 사용자 정의 주석(정수 또는 문자열 또는 기타 데이터, 연결된 클래스 또는 메서드 또는 변수에 대한 정적 집합을 정의하는 주석)에 대해 묻고 있다고 가정하고 있으며, 이는 컴파일 시 또는 런타임에 쿼리할 수 있습니다.안타깝게도 이런 종류의 주석과 @interface와 같은 다른 종류의 주석을 구별하는 마커는 없습니다.
언급URL : https://stackoverflow.com/questions/24221/java-annotations
'programing' 카테고리의 다른 글
MariaDB AUTO_INCREMENT 최대값(부호 없음)으로 점프 (0) | 2022.10.01 |
---|---|
PHP가 명령줄에서 입력을 기다립니다. (0) | 2022.10.01 |
JavaScript에서 배열에 다른 배열 요소가 포함되어 있는지 확인합니다. (0) | 2022.10.01 |
Python에서 인덱스로 목록을 반복합니다. (0) | 2022.10.01 |
Python에서 IoC/DI가 일반적이지 않은 이유는 무엇입니까? (0) | 2022.10.01 |