어노테이션?
@기호를 사용해서 음 내 생각인데 음 아마,, 어,, 뭔가 유지 관리가 편함
한번에 설정해서 그런지 뭐라지 내 이해로는 표가 있으면 한 행을 다 한번에 설정해서 좋아보임
public static String[] one(){
return new String[]{"번호", "이름", "가격"};
}
public Object[] getData(){
return new Object[]{productNo, productName, price};
}
public static int[] getWidth(){
return new int[]{100, 400, 200};
}
이게
public class ProductVo{
@Grid(name = "번호", width = 100, order = 1)
private String productNo;
@Grid(name = "이름", width = 400, order = 2)
private String productName;
@Grid(name = "단가", width = 200, order = 3)
private String price;
}
이렇게 바뀜
다시 돌아가서,
(Desc.java)
package object_1;
import java.lang.annotation.*;
/**
* toString()을 위한 @Desc어노테이션
* */
@Retention(RetentionPolicy.RUNTIME) // 자바 로딩 된 후에도 어노테이션 사용하겠어
@Target(ElementType.FIELD) // 해당 어노테이션을 전연변수에만 사용하겠다.
public @interface Desc{
public String name(); // @Desc(name = "속성명")사용 가능하게 타입 정의
}
(DefaultVo.java)
package object_1;
import java.lang.reflect.Field;
public class DefaultVo {
@Override
public String toString() {
//StringBuffer 클래스 객체 생성 : 문자열 자료 저장하기 위함
StringBuffer sb = new StringBuffer();
//문자열에 Class 객체생성, 클래스 정보 저장
Class<? extends DefaultVo> clazz = this.getClass();
sb.append(clazz.getName() + "정보");
//Field 목록 객체 생성
Field[] declaredFields = clazz.getDeclaredFields();
for(Field f : declaredFields) {
if(f != null) {
//변수 조회
String name = f.getName();
String desc = "";
//@Desc 어노테이션에 명시된 name()값 조회 : 필드 항목명
Desc anno = f.getDeclaredAnnotation(Desc.class);
if(anno != null) {desc = anno.name();}
//전역 변수 값 조회
String value = "";
try {
//접근 권한 부여 -> 전역변수 값 조회 -> 접근 권한 복원
boolean accessible=f.isAccessible();
f.setAccessible(true);
Object obj = f.get(this);
if(obj != null) { value = obj.toString();}
f.setAccessible(accessible);
}catch(IllegalArgumentException e) {e.printStackTrace();
}catch(IllegalAccessException e) {e.printStackTrace();}
//앞 문자열에 name, value, desc의 정보를 갖는 문자열 추가
sb.append("\r\n\t" + name + " = "+ value + " ["+ desc + "]");
}
}
return sb.toString();
}
}
- @Override : 부모 클래스가 가지고 있는 함수를 재정의 한다.
- 재정의 된 로직이 실행됨
- toString() : Object 클래스가 가지고 있는 함수
- System.out.println이 실행될 때, 객체 toString()함수를 호출함 -> 객체를 Stirng 타입으로 반환해줌
- StringBuffer() : 문자열 정보 관리
음 Desc에 저장되어 있는거 String으로 반환하려고 만든 거.
신기한건, <? extends DefaultVo>인데,, 클래스 정보가 저장이 되나봐
<? extend Object> 는 어떤 자료형의 객체도 매개변수로 받겠다는 의미라고 한다.
(ProductVo.java)
package object_1;
public class ProductVo extends DefaultVo{
//전역 변수 정의
@Desc(name = "품목번호")
private String productNo;
@Desc(name = "품목명")
private String productName;
@Desc(name = "단가")
private int price;
//getter setter 함수의 정의
public String getProductNo() {return productNo;}
public void setProductNo(String productNo) {
this.productNo = productNo;
}
public String getProductName() {return productName;}
public void setProductname(String productName) {
this.productName = productName;
}
public int getPrice() {return price;}
public void setPrice(int price) {this.price =price;}
}
Desc 정보 저장.
(MemberVo.java)
package object_1;
public class MemberVo extends DefaultVo{
//전역 변수 정의
@Desc(name ="회원아이디")
private String memberld;
@Desc(name = "회원명")
private String memberName;
//getter sater함수 정의
public String getMemberld() {return memberld;}
public void setMemberld(String memberld) {this.memberld = memberld;}
public String getMemberName() {return memberName;}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
}
(TestMain.java)
package object_1;
public class TestMain {
public static void main(String [] args) {
//prodectVo 객체 생성 -> 속성 설정 -> 객체정보 조회
ProductVo v1 = new ProductVo();
v1.setPrice(1000);
v1.setProductname("아메리카노");
v1.setProductNo("a001");
System.out.println(v1);
//MemberVo 객체 생성 -> 속성 설정 -> 객체 정보 조회
MemberVo v2 = new MemberVo();
v2.setMemberld("m001");
v2.setMemberName("홍길동");
System.out.println(v2);
}
}
결과
음 실습 해보니깐 어노테이션 좀 알 것 같기도 하고,,
근데 막상 짜보라고 하면,,
한번 실습 해보고싶다. 문제 줘서
ㅎㅎㅎ
get, set도 알겠당
근데 패키지가 너무 신기하네,, 패키지 안에만 있으면 import안 해도 다 연결이 되나봐,,
출처 : 자바 프로그래밍 100% 실전 가이드 세트(애프터스킬 시리즈)(전2권) | 심상원 | 아이콕스 - 교보문고 (kyobobook.co.kr) -> 391~ 397쪽
'study > java' 카테고리의 다른 글
Error querying database. Cause: java.lang.UnsupportedOperationException (0) | 2022.02.05 |
---|---|
[Tomcat] 설치 및 eclipse 설정 (0) | 2022.01.01 |
JAVA 상속 (0) | 2021.12.04 |
[백준] 2750_수 정렬하기 (java) (0) | 2021.11.13 |
java Ajax 연습하기 (0) | 2020.07.25 |