구아바: https://github.com/google/guava
iBatis에서 queryForList를 사용할 때 파라메터 클래스는 하나만 가능하다.
여러개 이상을 넘길 경우에는 클래스를 만들던지 컬렉션에 넣게 된다.
아래와 같은 코드가 있다고 치면
// String id, name
Map<String, String> params = new HashMap<String, String >();
params.put("id", id);
params.put("name", name);
// params는 인자로 쏙
구아바를 이용하면 세 줄이, 다음과 같이 한 줄로 가능하다.
ImmutableMap.of("id", id, "name", name)
ImmutableMap<K, V> of의 오버로딩이 여러개 있는데 인자가 가장 많은 것의 형태가
(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
인 걸로 봐서 인자는 5개까지 가능한 것 같다.
주의해야 할 점은 인자로 들어가는 값이 null일 경우 NullPointException이 발생할 수 있다는 것이다.
다음과 같은 방어 코드 잊지 말자!
if (CollectionUtils.isEmpty(name)) {
throw new IllegalArgumentException("Missing parameter: name was null or empty.");
}
(위의 CollectionUtils는 org.springframework.util의 CollectionUtils이다)
또한 리스트 인스턴스를 생성시에 new ArrayList()등을 사용할 수 있는데, 구아바의 정적 유틸리티 메서드를 이용할 수 있다.
List<Long> ids = new ArrayList<Long>();
ids.add(33961072L);
ids.add(37257834L);
대신에
List<Long> ids = Lists.newArrayList(33961072L, 37257834L);
로 사용할 수 있다.
만약, 메서드의 인자처럼 왼쪽 변수(LHS: left hand side)가 없을 경우 타입 추정을 할 수 없기에 아래와 같이 에러가 난다.
그럴 경우 아래와 같이 사용을 하면 추정이 가능해지기 때문에 에러가 사라진다.
Lists.<Long>newArrayList();
참고로, 구아바의 코드가 아래와 같이 되어 있다.
@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
[annotaion] javax.annotation.Nullable (0) | 2015.07.17 |
---|---|
[mokito] any~ 정리 (0) | 2015.06.30 |
[IntelliJ IDEA] lombok 그게 뭐지? (0) | 2015.04.29 |
[스프링] 스프링 레퍼런스 4 한글 작업中 (0) | 2015.03.24 |
[HTTP & Spring MVC] 파일 다운로드 구현시 파일명 지정 (0) | 2015.02.27 |