어노테이션 패키지
📌 GeoAPI 어노테이션 패키지 개요
GeoAPI는 org.opengis.annotation 네임스페이스를 사용하여 Java 어노테이션과 지원 클래스를 구현합니다.
➡ 이를 통해 GeoAPI에서 통합된 타입과 메서드의 출처, 원래 이름, 필수 여부를 문서화할 수 있습니다.
✅ 모든 GeoAPI 클래스(인터페이스, 열거형 포함)는 @UML 어노테이션을 사용해야 함
✅ @UML 어노테이션은 다음 정보를 제공
- 타입 또는 메서드가 정의된 표준
- 해당 요소의 원래 이름
- 필수 수준(의무 수준, Obligation Level) (기본값: Mandatory)
7.1 어노테이션 타입의 사용 예시
📌 ProjectedCRS 인터페이스의 어노테이션 예시
GeoAPI 소스 코드에서 ProjectedCRS 인터페이스는 다음과 같이 어노테이션이 지정됩니다.
@UML(identifier = "SC_ProjectedCRS",
specification = ISO_19111)➡ 해당 타입의 의미
✔ ISO 19111 표준의 “Coordinate Reference System” 패키지에서 “GeographicCRS”로 정의됨
📌 getCoordinateSystem() 메서드의 어노테이션 예시
@UML(identifier = "coordinateSystem",
obligation = MANDATORY,
specification = ISO_19111)➡ 해당 메서드의 의미
✔ ISO 19111 표준에서 “coordinateSystem”으로 정의됨
✔ GeoAPI에서는 “getCoordinateSystem()“이라는 이름으로 변경됨
✔ ProjectedCRS의 모든 인스턴스에서 NULL이 아닌 값을 제공해야 함
7.2 런타임에서 어노테이션 활용
📌 Java 인트로스펙션(Introspection) 활용
GeoAPI 어노테이션은 Java 리플렉션(Reflection) 기술을 이용하여 런타임에 검색할 수 있습니다.
예를 들어, Citation 타입의 getTitle() 메서드에 대한 @UML 어노테이션을 런타임에서 가져오는 코드:
Class<?> type = Citation.class;
Method method = type.getMethod("getTitle", (Class<?>[]) null);
UML annot = method.getAnnotation(UML.class);
String ident = annot.identifier();
Specification spec = annot.specification();
Obligation obl = annot.obligation();📌 어노테이션 시스템의 역할
✔ Java는 모든 클래스 또는 인터페이스에 대한 클래스 인스턴스를 제공 (Citation.class 등)
✔ getMethod(…) 호출을 통해 메서드에 대한 참조를 가져옴
✔ 가져온 메서드의 @UML 어노테이션 정보를 추출
➡ 이 기능을 사용하면 ISO 표준에서 정의된 원래 이름을 기반으로 데이터를 변환(marshall)할 때 유용함
➡ GeoAPI의 어노테이션 시스템을 활용하면, 런타임에서도 원래 정의된 요소에 접근 가능