일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- bind mismatch
- Netflix Hystrix
- hystrix
- Type Cast
- generic return
- 자바 병렬스트림
- 제네릭
- iBatis # $
- spring cloud
- Multi Threading
- java
- #
- circuit breaker
- 제네릭 리턴
- oracle
- 하이스트릭스
- iBatis
- generic
- parallelStream
- RESTful API
- ##
- binding
- bindmismatch
- 멀티스레드
- 타입캐스트
- $$
- mismatch
- $
- ForkJoinPool
- 바인딩
- Today
- Total
Milk's development review
Class정보를 이용하여 Generic 타입을 return하는 method 본문
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 |
---|