hello world
커스텀 어노테이션 본문
어노테이션이 해주는 역할은?
추가적인 정보를 제공해주는 메타데이터
(메타데이터란? 데이터에 대한 속성정보로 도서관을 예시로 들면 표제,저자,주제 등이 포함되어 있는 목록이 메타데이터에 속한다)
즉 어노테이션의 역할은 정보를 가짐으로서 그자체의 의미
쉽게말하면 프로그램의 주석
커스텀 어노테이션의 구성 (사용자 정의 어노테이션)
- 커스텀 어노테이션을 이용하는 방법
- 어노테이션을 정의한다.
- 어노테이션을 클래스에서 사용한다. (타겟에 적용)
- 어노테이션을 이용하는 코드를 수행한다.
@Target({ElementType.[적용대상]}) // ElemenType.METHOD (타입을 메소드로 선언)
@Retention(RetentionPolicy.[정보유지되는 대상]) //RUNTIME으로 지정할 시 컴파일 이후에도 JW에 의해서 참조가 가능
public @interface [어노테이션명]{
public 타입 elementName() [default 값]
...
}
@Target 어노테이션은 사용@Target(ElementType.ANNOTATION_TYPE) : 어노테이션
- @Target(ElementType.CONSTRUCTOR) : 생성자
- @Target(ElementType.FIELD) : 필드(멤버 변수, Enum 상수)
- @Target(ElementType.LOCALVARIABLE) : 지역변수
- @Target(ElementType.METHOD) : 메서드
- @Target(ElementType.PACKAGE) : 패키지
- @Target(ElementType.PARAMETER) : 매개변수(파라미터)할 어노테이션을 적용할 대상을 지정하는 데 사용한다.
@Target(ElementType.FIELD) : 필드(멤버 변수, Enum 상수) 를 사용해
Vo의 변수에 값을 주는 커스텀 어노테이션을 만들어보았다.
1.어노테이션을 정의한다.
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.FIELD)
public @interface fieldVoValue {
String value () default "";
int index() default 0;
}
(DIVN_NM 변수의 값 "소속"을 커스텀 어노테이션인 fieldVoValue로 맵핑해줌)
커스텀 어노테이션을 통해 Vo 변수의 값들을 list로 불러오기위한 작업이 필요했다.
2.어노테이션을 클래스에서 사용한다. (타겟에 적용)
public static String[] getAnnoValue(Class c) {
List<String> list = new ArrayList<>();
for ( Field field : c.getDeclaredFields() ) {
fieldVoValue fieldVoValue = field.getAnnotation(fieldVoValue.class);
if (fieldVoValue != null) {
l.add(fieldVoValue.value());
}
}
return list.toArray(new String[list.size()]);
}
3.어노테이션을 이용하는 코드를 수행한다.
getAnnoValue(MobileProcDto.class)를 호출할 경우
{"소속","사원이름","fax번호","메모"} 의 결과가 리턴됨을 확인할수있다.
'WEB > java' 카테고리의 다른 글
SerializationUtils.clone (0) | 2024.01.23 |
---|---|
builder pattern (빌더패턴) (0) | 2023.04.05 |
VO객체의 변수, 값들을 가져오는 방법 reflect (0) | 2022.07.22 |
자바 30일이 지났는지 체크하는 로직 (2) | 2021.11.08 |
jsonObject 객체 vo(dto) 매핑 (0) | 2021.02.07 |