[내용추가] Java reflect를 통한 List에 동적으로 구성되는 Generic 값들을 복사하는 방법이 있을까요?
돌삥
서로 다른 VO 사이에 데이터를 복사하려 합니다.
그런데 List 에 동적으로 구성되는 Generic입니다. List 안에 객체는 동일한 set/getter 메소드로 구성되어 있구요.
단일 객체의데이터를 복사하는 건 성공했는데요. List 안에 동적으로 구성되는 Generic을 복사 하려 합니다.
방법이 있을까요? 참고 소스 올려 봅니다. 고수님들의 조언 부탁드립니다.
classTarget{
protected StringRPT_CNT;
protected ListCOMMON common;
public String getRPT_CNT() {
return rptCNT;
}
public void setRPT_CNT(String value) {
this.rptCNT = value;
}
public ListCOMMON getCOMMON() {
if (common == null) {
common = new ArrayListCOMMON();
}
return this.common;
}
public void setCOMMON(ListCOMMON common) {
this.common = common;
}
}
public class COMMON {
protected String CD;
protected String NM;
public String getCD() {
return cd;
}
public void setCD(String value) {
this.cd = value;
}
public String getNM() {
return nm;
}
public void setNM(String value) {
this.nm = value;
}
}
class Source {
public String getCD() {
return cd;
}
public void setCD(String value) {
this.cd = value;
}
public String getNM() {
return nm;
}
public void setNM(String value) {
this.nm = value;
}
}
구조는 대략적으로 이렇게 구성이 되어 있습니다.
Source 와 Target은 정적 객체가 아니라동적 객체입니다.
항상 다른 객체가 넘어 옵니다.
함수로 ListSource 와 Target 을 넘겨 ListSource의 값들을 Target의 ListCOMMON 의 값으로 복사하는 방식입니다.
가능할까요? 혹 설명이 부족한 부분이 있다면 말씀해 주시면 좀더 자세히 설명 올려 놓겠습니다.
고수님들의 조언 다시한번 부탁드립니다.내용을 좀더 보충하도록 하겠습니다.
소스로 설명을 좀 해보도록 하겠습니다.
ListSource src = 쿼리를 통해리스트 값이 리턴되어 할당됩니다.;
Target trg = new Target();
copyObject ( trg, src);
public void copyObject ( Object target , Object source )
{
1. target 의 변수중 List 타입인 변수를 찾습니다.(참고로 내부 구조상 List 타입은 무조건 하나입니다.)
2. List 변수의 Generic 타입을 확인합니다.
3. 새로운 ListGeneric 으로 변수를 생성합니다.
4. source의 Generic 타입을 확인합니다.
5. source의 size 만큼 for 을 돕니다.
5-1. source에 할당되어 있는 Generic 타입의 객체를 받아옵니다.
5-2. source의 Generic 객체를 2번에서 확인한 Generic 타입의 객체에 복사를 합니다.
( 이때 또한 Reflect 를 통해 setter/getter 메소드로 값을 세팅해서 복사를 합니다. - 구현됨 )
5-3. 3번에 생성됬던 변수에 add를 합니다.
6. 3번의 생성된 LIST 객체를 target의 1번에 찾은 변수에 할당합니다.
}간단히 말씀드리면 쿼리 결과인 List 객체를 다른 객체의 List 객체에 복사하고 싶은데 객체 타입이 전혀 다릅니다.
하지만 내부의 변수명이 같기에 reflect 를 통해 복사를 하려고 합니다.
이걸로 설명이 좀 될지 모르겠네요. 고수님들의 조언 기다리겠습니다...ㅜㅜ