에몽이

java. 리플렉션(reflection)을 통한 인터페이스(Interface) 동적 구현 본문

java

java. 리플렉션(reflection)을 통한 인터페이스(Interface) 동적 구현

ian_hodge 2018. 1. 24. 20:56

java. 리플렉션(reflection)을 통한 인터페이스(Interface) 동적 구현

인터페이스의 타입 정보를 특정할 수 없는 상황에서도
해당 인터페이스를 구현한 객체를 생성할 수 있습니다.

인터페이스와 클래스가 다음과 같이 정의되어 있다고 합시다.

인터페이스입니다. 
package some.test;

public interface SomeInterface{
 public int some();
}

클래스입니다. 
package some.test;

public class SomeClass{

 public int test( SomeInterface i ){
  return i.some();
 }

}

해당 인터페이스와 클래스의 타입정보를 특정할 수 없는 상황에서도
다음과 같이 인터페이스를 구현한 객체를 생성하고 사용할 수 있습니다.

public static void main( String[] args )throws Exception{

 InvocationHandler impl = new InvocationHandler(){
  @Override
  public Object invoke( Object proxy, Method method, Object[] args )throws Throwable{
   if( method.getName().equals( "some" ) ){
    return new Integer( 3 );
   }
   return null;
  }
 };
 Object param = Proxy.newProxyInstance( TestInterface.class.getClassLoader(), new Class[]{ Class.forName( "some.test.SomeInterface" ) }, impl );
 
 Object someCls = Class.forName( "some.test.SomeClass" ).newInstance();
 Method  m = someCls.getClass().getMethod( "test", Class.forName( "some.test.SomeInterface" ) );
 Object rtn = m.invoke( someCls, param );
 
 System.out.println( rtn );//3

}




'java' 카테고리의 다른 글

java.util.concurrent.locks  (0) 2018.03.05
ThreadLocal 사용법과 활용  (0) 2018.02.20
java Synchronized  (0) 2017.12.21
Java Concurrency: Executor와 Callable/Future  (0) 2017.10.25
Java Annotation: 인터페이스 강요로부터 자유를…  (0) 2017.07.25
Comments