제너릭 메소드를 만들다 문법이 잘 기억이 나질 않아 테스트 코드를 작성해 보았다.
내가 헷갈려 했던 부분은 다음의 코드에서 <T> T 부분이였다.
public <T> T getObj(String objKey, Class<T> type) {
정리를 하자면 <T>는 메소드 아규먼트에 타입 매개변수 T가 선언되어 있으면 추가되어야 하는 것이고, 그 옆에 있는 T 는 return type을 의미한다.
이제 정리가 되었으니 테스트 코드를 작성해 보자.
테스트 코드는 Map 객체에 저장되어 있는 특정 클래스 type을 추출하는 방식이다.
첫 번째 방법은 제너릭을 사용하지 않은 방법이고, 두 번째 방법은 제너릭을 사용한 방식이다.
코드를 보면 알겠지만 첫 번째 방법은 Map에 저장되어 있는 객체를 추출하기 위해서 여러 개의 메소드를 생성해야 추출이 가능하다.
그런 반면 제너릭 메소드를 생성하게 되면 하나의 메소드 안에서 다양한 객체를 추출 받을 수 있는 유연함을 얻을 수 있다.
스프링의 애플리케이션 컨텍스트에서도 bean을 Dependency Lookup 할 때 제너릭 메소드를 사용하여 다양한 타입의 빈을 추출 가능하도록 설계되어 있다.
@SuppressWarnings("unchecked")
public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
Object bean = getBean(name);
if (requiredType != null && !requiredType.isAssignableFrom(bean.getClass())) {
throw new BeanNotOfRequiredTypeException(name, requiredType, bean.getClass());
}
return (T) bean;
}
'프로그래밍' 카테고리의 다른 글
HTTP request body copy 방법 (0) | 2014.04.29 |
---|---|
javascript self closing 문제 (2) | 2014.04.16 |
Spring MappingJacksonJsonView modelKey가 하는 역할 (0) | 2014.03.15 |
JUnit private method test (0) | 2014.03.04 |
JUnit 테스트 실행 시 src/test/resource 패키지의 설정 파일만 읽어 들일까? (3) | 2014.02.25 |
jackson JSON 사용 중 UnrecognizedPropertyException 발생 시 (2) | 2014.02.15 |
spring security ajax session timeout 체크 방법 (1) | 2014.01.08 |
Ant style pattern 정리 (399) | 2014.01.06 |