이펙티브 자바(EFFECTIVE JAVA)

저자
JOSHUA BLOCH 지음
출판사
대웅 | 2009-04-13 출간
카테고리
컴퓨터/IT
책소개
더 명쾌하고, 더 정확하고, 더 강력하고, 재사용 가능한 코드를...
가격비교 글쓴이 평점  


이펙티브 자바를 읽다가

static 팩토리 메소드의 네 번쨰 장점 중 하나인, 매개변수화 타입parameterized type의 인스턴스를 생성하는 코드를 간결하게 해준다.

는 내용을 보고, 문득 구글 Guava Library의 Maps, Lists 클래스를 떠올렸다. 아무런 생각없이 무심코 사용하던 녀석들이었는데…


자바에서는 인스턴스를 생성할 때 클래스의 생성자를 호출해주어야 한다.

Map<String, Object> map = new HashMap<String, Object>();

위의 map 인스턴스를 생성하는 코드를 guava 에서는 아래와 같은 형태로 선언하여 사용가능하다.

Map<String, Object> map = Maps.newHashMap()

앞선 기존 방식의 인스턴스에 비해 guava의 Maps를 통해 얻을 수 있는 이점은 <String, Object> 매개변수화 타입을 선언하지 않아도 된다는 것이다. 어떻게 보면 미묘한 차이지만, 번거로운 타이핑을 줄일 수 있다는 것만으로도 큰 이득이다. 아마 Maps.newHashMap() static 메소드는 다음과 같은 형태를 띄고 있을 것이다.

public static <K, V> HashMap<K,V> newHashMap() {
    return new HashMap<K, V>();
}


실제코드는 Maps.java - guava-library 에서 살펴볼 수 있는데, 실제코드를 살펴보면

 /**
   * Creates a <i>mutable</i>, empty {@code HashMap} instance.
   *
   * <p><b>Note:</b> if mutability is not required, use {@link
   * ImmutableMap#of()} instead.
   *
   * <p><b>Note:</b> if {@code K} is an {@code enum} type, use {@link
   * #newEnumMap} instead.
   *
   * @return a new, empty {@code HashMap}
   */
  public static <K, V> HashMap<K, V> newHashMap() {
    return new HashMap<K, V>();
  }

으로 되어 있는 것을 볼 수 있다. 아직까지 JDK7(HashMap - openjdk 7) 까지도 이런 형태의 static 팩토리 메소드를 가지고 있지 않다. 딱히 나올 것 같아보이지도 않긴 하다. static 팩토리 메소드는 개발자의 몫이니까…

편하게 Guava를 가져다 사용하던가, 필요한 부분만 개발자가 구현해서 사용하던가…


참고

  • Google guava

    The Guava project contains several of Google’s core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth.

    구글에서 제공하는 라이브러리로, 나는 collections 에 대한 처리용도로만 사용을 했었는데… 생각보다 지원하는 기능이 다양하다…!


+ Recent posts