Milk's development review

Class정보를 이용하여 Generic 타입을 return하는 method 본문

Language/JAVA

Class정보를 이용하여 Generic 타입을 return하는 method

YooMilk 2017. 7. 20. 11:53
반응형

java에서는 primitive type을 제외한 모든 클래스는 Object의 서브 클래스들이다.

그래서 다양한 type의 오브젝트를 return하고 싶을 때 return type을 Object로 설정 해주고는한다.

예제 코드로 보면 아래와 같다.



 private Object testMethod(String type) {

     Object returnObejct = method(type);

               :

               :


     return returnObject;

 }




method() 는 argument로 전달된 type에 따라서 다른 형식의 오브젝트를 리턴 해 주는 팩토리 메서드라고 가정하자.

위와같은 testMethod()는 다양한 타입의 object를 리턴 할 것이다.


하지만 testMethod()를 사용하는 클라이언트 메서드는 Object 타입의 객체를 return 받을 것이고

특정 타입의 객체에 할당하려면, 항상 아래 예제 코드와 같이 type cast를 해주어야 한다.


Subject subject = (Subject)testMethod("Subject"); 


이와 같은 지저분한 type cast코드를 제거하려면 java의 generic을 이용해 return 받을 type class정보를 

클라이언트 메서드에게 입력받으면 된다.


 

 private <T> T testMethod(String type, Class<T> clazz) {

     Object returnObejct = method(type);

               :

               :

    

     return clazz.cast(returnObject);

 }



위와 같이 구현 된 메서드를 사용 하면


 Subject subject = testMethod("Subject", Subject.class); 


클라이언트 메서드가 testMethod를 호출하는 시점에 return type의 정보를 들고있는 클래스 객체를 넘겨주기 때문에

지저분한 type cast 과정이 필요없어진다.


제네릭 타입으로 구현된 testMethod의 제네릭 선언부분은 다음과 같이 요악 가능하다.


 

 private <T> T testMethod( . . .

             ∧   ∧

             |    + return type

              + Generic type argument 



Generic을 사용하면 유연성은 늘어나지만, 코드가 복잡해질 수 있다는 단점도 있다.


반응형

'Language > JAVA' 카테고리의 다른 글

ForkJoinPool과 ParallelStream  (2) 2019.09.17
Comments