0. 주석, 주석이란 무엇인가
Annotation은 JEE5에서 새롭게 추가된 문법적 요소로 “annotation”의 사전적 의미를 갖는다. 의미에 따라 Java 코드에 주석처럼 붙여서 특별한 의미를 부여합니다. “@”를 사용하고 “At”를 읽습니다.
1. 주석의 배경
기존 Java 웹 애플리케이션은 선언적 프로그래밍 방식을 사용합니다. “선언적”이란 외부 XML 구성 파일에서 전체 프로그램 및 각 계층의 구성 및 설정 값을 지정하는 방법을 의미합니다. 변경할 수 있는 데이터는 외부 설정 파일에 최대한 분리해 놓았기 때문에 변경 요청이 들어와도 컴파일하지 않고 쉽게 적용할 수 있었다. 이를 통해 ‘유연성’이라는 장점을 얻었지만, 프로그램 성찰을 위해 매번 많은 설정 파일을 생성해야 했기 때문에 규모가 커질수록 설정량이 많아질수록 구조화의 필요성이 커졌다. 또 다른 단점은 도메인 데이터 처리 정보가 모델, 서비스, XML 구성 파일로 분리되어 있어 확인 시 파일 하나하나를 일일이 살펴봐야 한다는 점이다.
2. 주석의 장점
위의 문제를 해결하기 위해 주석이 나타났습니다. Model 클래스에 적용할 외부 데이터에 대한 유효성 검사 조건을 지정함으로써 코드가 더 깔끔해지고 유효성 검사 조건을 쉽게 식별할 수 있습니다.
XML 구성은 여전히 유연성을 확보할 수 있는 장점이 있기 때문에 빌드된 코드를 컴파일하지 않고 수정 사항을 적용하기가 쉽습니다. 따라서 전개 환경에 따른 변화나 어플리케이션의 전반적인 구성은 XML 구성을 사용하는 것이 좋다.
3. 주석의 사용
주석은 주로 문서화, 컴파일러 검사 및 코드 분석에 사용됩니다. @ 기호가 있는 기호를 사용하여 패키지, 클래스, 메서드, 속성 및 변수를 지정할 수 있습니다. 주석이 달린 소스는 API 문서화를 위해 컴파일 타임에 수집할 수도 있습니다. (JavaDoc이라는 좋은 문서화 도구가 있기 때문에 “문서화”는 주석 사용 중 가장 덜 중요합니다.) 또한 컴파일 시간에 오류를 생성하여 개발자에게 위험 요소를 경고할 수 있습니다. 가장 일반적인 용도는 “메타데이터”와 같은 코드 분석입니다. 데이터를 위한 데이터로서 주석의 유용성을 가장 느낄 수 있습니다.
4. 주석 분류
– 마커 주석: 멤버 변수가 없습니다. 단순한 기호로 사용되며 의미를 전달하는 데 사용됩니다.
– 단일 값 주석: 단일 변수만 구성원으로 포함합니다. 값을 지정하여 데이터를 전달할 수 있습니다.
– 전체 주석: 두 개 이상의 변수를 구성원으로 갖고 값 쌍의 형태로 데이터를 전송하는 주석.
5. 내장 주석
Java SDK에서 제공하는 주석입니다. @Override, @Deprecated, @SupressWarning 등
@Override: 현재 지정된 메서드가 상위 클래스의 메서드를 재정의함을 컴파일러에 나타냅니다.
@Deprecated : 마커 어노테이션으로 향후 버전에서 지원되지 않을 수 있으므로 더 이상 사용해서는 안 되는 메소드를 나타냅니다.
@SupressWarning : 경고를 제거합니다.
6. 맞춤 주석
임의로 정의된 주석은 interface 키워드 앞에 @를 붙여서 사용할 수 있습니다.
// 여전히 작업 중임을 나타내기위해 정의한 마커 어노테이션
public @interface InProgress {}
// 단일 멤버추가
public @interface TODO {
String value();
}
// 사용
@TODO("Figure out the amount of interest per month")
public void calculateInterest(float amoung, float rate) {
// ...
}
// 디폴트 값 설정
public @interface Group TODO {
public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION };
Severity severity() default Severity.IMPORTANT;
String item();
String assignedTo();
String dateAssigned();
}
// 사용
@GroupTODO(
item="Figure out the amount of interest per month",
assignedTo="Brett McLaughlin",
dateAssigned="08/04/2004"
)
public void alculateInterest(float amoung, float rate) {
// ...
}
7. 메타 주석
해당 주석 작업의 대상을 결정하기 위해 주석에 사용되는 주석입니다.
– @Target meta-annotation: Annotation이 적용되는 action과 element를 명시한다.
– @Retention meta-annotation: Java 컴파일러가 주석을 처리하는 방법과 관련이 있습니다. 소스 파일, 클래스 파일 또는 런타임에 주석을 유지할지 여부를 결정합니다.
