이펙티브 자바(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 에 대한 처리용도로만 사용을 했었는데… 생각보다 지원하는 기능이 다양하다…!


어느 스터디에서 개발환경 구축과 관련된 이런저런 이야기가 오고가는 것을 보다가, 문득 생각이 나서 다시 찾은 'OPENSFHIT'

https://www.openshift.com/

보는 것처럼, 개발, 호스팅, 스케일 확장의 기능을 제공하는 플랫폼이다. 익숙한, Java, Maven, Git, Tomcat, Jenkins를 제공하여 기어(Gear, 가상머신 인스턴스의 개념)로 제공한다. 협업자들을 추가하여 사용가능하다.


Free plan으로 사용

최초 'My app' 선택시

사용가능한 Gear(인스턴스 개념)

Tomcat7 기어 선택 예

Tomcat 기어 설치 후, 자바를 기반으로 한 웹애플리케이션 프로젝트가 추가된 git 저장소도 함께 추가됨

git에 대한 접근은 'Settings - Public Keys' 항목에 개인 public key를 생성하면 됨

- SSH public key 생성방법: https://help.github.com/articles/generating-ssh-keys

Tomcat7 기어 생성 완료후



Tomcat7 기어를 통해 생성한 프로젝트의 초기 디렉토리 구조

Tomcat7 기어가 실행된 URL을 통한 동작확인

- 기본 동작은 git을 통해 push가 실행되는 순간 빌드 및 배포가 이루어진다.

Tomcat7 기어 밑에 'Continous Integration' 에 있는 'Enable Jenkins'를 선택하면 Tomcat7 기어에 대한 빌드잡(Job)을 가진 Jenkins 기어가 생성된다.

젠킨스 기어의 공개 URL을 정의한다.

젠킨스 기어가 생성되고 최초 계정 admin과 비밀번호가 노출된다.

젠킨스 기어에 추가된 'tomcat7ews-build' 작업





MySQL 5.5 카트리지를 tomcat7 기어에 추가하는 모습

추가 완료 후, MySQL 5.5 생성정보가 노출

생성된 URL과 계정을 통해 로그인한 phpMyAdmin

기어 사용이 완료된 tomcat7의 내부 모습

이 과정에서 나는 2개의 기어를 생성했다.

- Tomcat7

- Jenkins

아직 1개의 기어가 남아있다.

Free plan으로는 3개의 기어가 사용가능하다.

협업도 가능한데, [Application]을 선택한 화면에서 'Available in domain XXXXX' 를 선택하고

오른쪽에 있는 'No one else can see this domain. Add members...'에서  'Add members`를 선택하고

OpenShift에 가입해있는 사용자 id와 권한 [View, Edit, Administrator] 권한 중 하나를 할당하면 된다.

굿럭!

하지만, POST 타입에서 막혔다. ㅡ_-);; 하아...

요청헤더Request Header에 Accept와 Content-Type을 지정하는 방법이 자세히 나와있는 것이 없다. 두둥...!

여기서는 입맛에 맞게 수정이 필요한건가? 이 프로젝트를 포크Fork한 사람들이 수정한 방법을 찾아봐야겠다.


 

 참고 

 

  • Mashery I/O docs: https://github.com/mashery/iodocs


몰랐네. +_+)> logback.groovy    



이왕 그루비를 파기로 했으니, 계속 파보자.

이클립스에서 참조한 라이브러리의 소스코드가 보이지 않는 경우가 있다.

그럴 때는, 프로젝트Project의 속성Properties를 열어서 'Java Build Path' 탭 중 [Order and Export] 에서 'Web App Libraryes' 항목을 제일 밑으로 내리면 된다. 'Web App Libraries'를 선택하고 오른쪽에 활성화된 [Bottom] 버튼을 누르면 된다.


+ Recent posts