간단한 Java Reflection 사용 사례 :: 2010/09/02 16:20



Java의 Reflection을 사용하면 속도는 뭐 그저 그럴지 모르지만 귀찮은 작업이 줄어들 때가 있습니다. 가령 어떤 객체의 모든 필드와 그 값의 쌍을 Map 객체 안에 저장하고 싶다거나 할때 특히 유용하죠. (그 역방향 작업이 필요할 때도 있겠죠.)

그런 작업이 필요할 때 어떤 코드를 작성하면 되는지 보시면...


import java.lang.reflect.Field;

import java.util.HashMap;

import java.util.Map;



class A {

private String p;

private String q;

A() {

p = "foo";

q = "bar";

}

public String getP() {

return p;

}


public String getQ() {

return q;

}


public Map<String, Object> toMap() {

Field[] fields = this.getClass().getDeclaredFields();

Map<String, Object> ret = new HashMap<String, Object>();

for ( int i = 0; i < fields.length; ++i ) {

try {

ret.put(fields[i].getName(), fields[i].get(this));

} catch (IllegalArgumentException e) {

e.printStackTrace();

return null;

} catch (IllegalAccessException e) {

e.printStackTrace();

return null;

}

}

return ret;

}

}



public class Test {


/**

* @param args

*/

public static void main(String[] args) {

A a = new A();

Map<String, Object> r = a.toMap();

for ( String s : r.keySet() ) {

Object o = r.get(s);

System.out.println("key:" + s + ", value:" + o.toString());

}

}


}


뭐 보시다시피 별로 어렵지는 않습니다. 그런데 이런 코딩이 대체 언제 필요하느냐...

XML-RPC 위에서 API를 구현한다거나 할 때 유용하죠. ㅋㅋ XML-RPC의 struct 타입을 Apache XML-RPC 라이브러리에서는 Map Object 형태로 처리하거든요.

크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
미투데이로 한마디트위터로 한마디
트랙백 주소 :: http://www.buggymind.com/trackback/289 관련글 쓰기
성함
비밀번호
홈페이지 비밀글로
< PREV |  1  |  2  |  3  |  4  |  5  |  ...  235  |  NEXT >