여러 블로그를 보면 리플렉션에 대해 설명해 놓은 것은 많은데 실전에 써먹을 만한 코드는 별로 없는 것 같다. 그래서 나중에 참고 할 겸 정리해본다.

여기서는 Vo(Value Object)를 중심으로 설명했다. 웹 서비스 등에서 레이어를 따라 Vo가 왔다 갔다 할 텐데, 본인의 경험 상 이러한 Vo의  set 메소드나 get 메소드를 동적으로 실행해야 할 때가 있기 때문이다.

또한 제너릭을 이용해 특정 인터페이스를 구현한 객체만 메소드를 동적으로 실행하는 객체의 생성자 파라미터로 들어올  수 있도록 했다.

먼저 Vo라는 인터페이스를 만든다. 이 인터페이스를 다른 객체들이 구현해서 다형성을 따를 수 있도록 하기 위해서다. 이 Vo를 구현한 객체는 반드시 아래의 set method를 구현해야 할 것이다.


이 인터페이스를 ExVo가 구현하게 한다. ExVo는 aaaa, bbbb, cccc, dddd 라는 int 형의 변수가 있다. 우리는 이 변수의 set 메소드를 동적으로 호출 할 것이다.



비교를 위해 간단히 OtherVo란 것도 만든다.




이제 메소드를 동적으로 호출 할 수 있게 해주는 클래스인 ReflectionEx의 코드다. 여기서는 ExVo의 변수명과 집어넣을 값이 invokeMethod라는 메소드의 파라미터로 넘어오면 ExVo의 set 메소드가 호출되서 변수에 값을 저장할 수 있게 했다. 또한 제너릭(Generic)을 ReflectionEx의 생성자에 활용해 생성자의 파라미터에 Vo 인터페이스를 구현한 객체만 들어올 수 있도록 했다.
이 코드를 응용하면 다양한 방법으로 구현될 수 있을 것이다. 
일단 간단하게 main메소드로 println을 통해 ExVo의 변수에 저장된 값을 쉽게 확인할 수 있도록 했다.



어플리케이션을 실행하면





Posted by 타다키치
,