JDK8 의 람다 표현식에 대해서 어떤 글보다 잘 설명되어있다고 추천된 글.

http://blog.hartveld.com/2013_03_01_archive.html

JDK8 에서 가장 큰 특징이라면 Lamda expression 이라고 하는데...

슬슬 컴퓨터에 JDK8 설치하고 람다 표현식에 대해서 학습을 진행해야겠다.


그런데... 의욕이 안생겨. Orz...

회사 그만두고 노는 동안 살펴볼 수 있을까나?

공부하면서 저 글 번역해볼까?


얼마전, Oracle에서 JDK8 을 정식 출시했다. 가장 큰 변화라면 람다 표현식(Lamda expression)일텐데...

차근차근 학습해보도록 하자.


http://www.oracle.com/technetwork/java/javase/downloads/index.html



 

 JDK8 Release note 

 

http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html



바로 JDK8을 적용하기보다는 JDK8u10 까지는 차분히 기다리면서 학습을 하며 준비하는 것이 좋아보인다고 한다.

   파란색 구분선!  
 

* 참고: OpenJDK 8 : http://openjdk.java.net/projects/jdk8/




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


Helloworld를 살펴보자! 

public class Helloworld {
	public static void main(String[] args) {
		System.out.println("Hello world.");
	}
}

javac Helloworld.java

생성된 Helloworld.class를 살펴보자.

javap -c -l -v Helloworld.class

javap [번역] 는 클래스(.class) 파일 역어셈블러(역컴파일러는 이상한가? ㅡ_-)?)이다. 컴파일되어서 바이트코드가 된 클래스파일을 살펴본 적이 없었다. ㅡ0-);;

Classfile /ihoneymon/Documents/Helloworld.class
  Last modified 2013. 6. 26; size 426 bytes
  MD5 checksum 1c34705a72fff1557ef69c977ce53552
  Compiled from "Helloworld.java"
public class Helloworld
  SourceFile: "Helloworld.java"
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #6.#15         //  java/lang/Object."<init>":()V
   #2 = Fieldref           #16.#17        //  java/lang/System.out:Ljava/io/PrintStream;
   #3 = String             #18            //  Hello world.
   #4 = Methodref          #19.#20        //  java/io/PrintStream.println:(Ljava/lang/String;)V
   #5 = Class              #21            //  Helloworld
   #6 = Class              #22            //  java/lang/Object
   #7 = Utf8               <init>
   #8 = Utf8               ()V
   #9 = Utf8               Code
  #10 = Utf8               LineNumberTable
  #11 = Utf8               main
  #12 = Utf8               ([Ljava/lang/String;)V
  #13 = Utf8               SourceFile
  #14 = Utf8               Helloworld.java
  #15 = NameAndType        #7:#8          //  "<init>":()V
  #16 = Class              #23            //  java/lang/System
  #17 = NameAndType        #24:#25        //  out:Ljava/io/PrintStream;
  #18 = Utf8               Hello world.
  #19 = Class              #26            //  java/io/PrintStream
  #20 = NameAndType        #27:#28        //  println:(Ljava/lang/String;)V
  #21 = Utf8               Helloworld
  #22 = Utf8               java/lang/Object
  #23 = Utf8               java/lang/System
  #24 = Utf8               out
  #25 = Utf8               Ljava/io/PrintStream;
  #26 = Utf8               java/io/PrintStream
  #27 = Utf8               println
  #28 = Utf8               (Ljava/lang/String;)V
{
  public Helloworld();
    Signature: ()V
    flags: ACC_PUBLIC
    LineNumberTable:
      line 1: 0
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0       
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return        
      LineNumberTable:
        line 1: 0

  public static void main(java.lang.String[]);
    Signature: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    LineNumberTable:
      line 3: 0
      line 4: 8
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #3                  // String Hello world.
         5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: return        
      LineNumberTable:
        line 3: 0
        line 4: 8
}

이 Helloworld 클래스의 경우에는 main() 메소드에 의해서 실행되다 보니 더욱 절차적인 형태를 띄게 되지 않았을까? 

역컴파일된 클래스파일을 보면, 실행순서와 참조하는 라이브러리들을 확인할 수가 있다. 이런거였군~!


이제 조금은 자바를 대하는 태도가 변하고 있는 듯 하다. 얼마 전까지만 해도 구현하는 것에만 집착했었는데, 최근에는 개발환경 구축, CI, 변경이력관리, 아키텍처 등에 대해서 조금씩 시선이 돌아가고 있다. 그만큼, 내 역량이 성장했다는 증거가 되길 바란다.

지난 토요일(2013. 02. 23.) 코엑스에서 [Follower 에서 Creator로!] 라는 주제로 JCO가 주최한 제 13회 한국자바개발자 컨퍼런스 대회(http://jco.zdnet.co.kr/)가 열렸다. 


국내에서 열리는 자바관련 컨퍼런스로는 가장 큰 행사다(이제는 Deview, Devon, H3 등의 규모도 굉장히 커졌다). 개발관련 큰 컨퍼런스들이 열리는 것은 개발자들에게 굉장히 좋은 여건을 마련해준다.


 

 컨퍼런스 청취 세션 정리  

 

2013/02/24 - [Java/Java] - 제13회 JCO 첫번째 발표, 우리들이 말하는 분산환경(Itembay mobile Service)

2013/02/24 - [Java/Java] - 제 13회 JCO 두번째 발표, 파이썬3 기반의 웹 프레임워크 : 파이라떼PyLatte

2013/02/24 - [Java/Java] - 제13회 JCO 세번째 발표, Server side software development

2013/02/24 - [Java/Java] - 제 13회 JCO 네번째 발표, MongoDB, DB설계 패턴 및 성능 튜닝 솔루션

2013/02/24 - [Java/Java] - 제13회 JCO 다섯번째 발표, OAuth 기반 오픈 API활용 실전


 

 컨퍼런스 시작 전 우려에 대한 이야기

 

2013/02/10 - [Java/Java] - 제 13회 JCO에 대한 한소리


 

 블로그 홍보왕, 2관왕

 

많은 사람들기 기다리고 기다리는 경품추첨의 시간!

운이 좋게도 JCO 블로그 홍보왕에 올해도 당선이 되었네요. 그저 블로그에 관련 이미지를 복사해서 올렸을 뿐인데...

2013/01/21 - [Java/Java] - [제 13회 한국 자바개발자 컨퍼런스]가 열립니다.

작년에는 SSD 128GB, 올해는 SSD 256GB를 받았습니다. 집에 오자마자, 데스크탑에 꽂힌 HDD를 뽑아내고 SSD로 꽂고 윈도우와 우분투 리눅스를 깔고 돌려보니 감동의 눈물... ㅠㅅ-)!!


 

  JCO 풍경

 

012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182


 

 한국자바개발자 컨퍼런스 참관, 그 후 이야기

 

Follower에서 Creator로!

  컨퍼런스 참관후기에는 '이 주제에 대한 답을 얻었는가?'에 대한 이야기를 중점적으로 다루는 것이 적절하겠다. 내가 그런 이야기를 할 수 있는 위치나 경험은 미천하지만...

  기술적인 트렌드가 많이 변했다. 과거 벤더(Vendor, Oracle과 IBM 같은) 중심이었던 데에 반해서, 이제는 오픈소스 중심의 시대가 되었다. 서비스를 제공하는 대부분의 기술들이 오픈소스를 기반으로 하고 있다. 빅데이터와 클라우드라는 용어가 흔하게 쓰이고 있는 기술적 트렌드의 중심에는 오픈소스들이 있다. 빅데이터의 중심에 있는 NoSQL 기반의 데이터베이스, 대용량 데이터 분산처리 및 클라우드 컴퓨팅의 근간이 되는 하둡, 기술들의 중심에는 오픈소스가 자리잡고 있다.
  오픈소스 기술을 사용할 때 중요한 것은, '소통'과 '기술의 내재화'라고 생각한다. 오픈소스 기술을 사용하면서 생길 수 있는 '내부적인 결함'과 '시행착오'를 개발자들이 해결해야한다. 해결하기 위해서는 '오픈소스 관련 개발자들과의 협력' 및 '내부 개발자들의 학습과 그 과정에서 생기는 경험의 축적'이 중요해진다.
  우리나라는 대기업 중심의 기술선도 문화가 깊게 자리잡고 있다. 대기업들은 풍부한 자본과 인력을 바탕으로 독점적으로 정보를 공유해왔었다. 그런  이들을 중심으로 최신 기술들을 도입을 시도하고 그 과정에서 시행착오들의 경험들이 은은히 퍼져나가게 된다. NHN, Daum, KTH, SKPlanet 등의 기업에서 큰 컨퍼런스를 주최하기 시작한 이유는... 뭘까요? +_+)~ ㅎㅎ
  그래도 요즘은 그 기업들의 노하우 공유의 장이 많이 열리기 시작해서 기술적인 유행에서 조금 멀리 있는 개발자들에게도 유행의 맛을 볼 수 있는 기회를 제공하고 있다. 수도권을 중심으로 열리는지라 지방에 계신 분들은 접하기가 어렵기는 하겠다. 그래도 전에 비하면 훨씬 나아졌지만... 
역시 개발자는 서울로 와야한다! 응?

참관 평가의 기준이 되는 'Follwer에서 Creator로!'에 대한 이야기 시작해보겠다.
이번에 참관했던 내용들을 가지고 내가 Creator가 될 수 있을까?
.... 좋게 대답하기 어렵다. 
  몇몇 발표들은 마음에 들었다. 그런데 몇몇 발표들은 '왜 들었을까...?'하는 생각이 들기도 했다. 자바와의 연관성을 찾아볼 수 없는 발표도 있었다. 다른 개발 컨퍼런스에서라면 '자바와의 연관성'에 대해서 크게 신경쓰지는 않았을 것이다. 하지만 JCO다. '한국자바개발자 컨퍼런스'라는 이름을 걸고 하는 컨퍼런스에서 '자바'와의 관계성이 적은 주제의 발표들이 섞여있는 것이 참 아쉬움이 많다. 다른 언어에 대한 소개나 사례를 발표한다면, 발표주제는 '자바언어를 사용하는 개발자가 효과적으로 접근할 수 있는 포인트와 자바와의 차이점'에 대해서 알려주는 것이 맞지 않을까?
개인적으로는 '자바'를 바탕으로 '스타트업Start-up'에서도 사용할 수 있을만큼 빠르고 안정적으로 생산성을 높이고 결과물을 도출할 수 있는 방법에 대해서도 이야기가 나올 수 있으면 참 좋겠는데, 이런 이야기가 '자바Java'라는 언어를 가지고는 할 수 없는건지 아쉬움이 많다. 

  해가 갈수록... 아쉬움이 많아지는 JCO 컨퍼런스다. 
올해 출시되는 오라클에서 처음으로 내놓는 JDK 8에 대한 소개를 하는 코너도 없는게 참 거시기 했다. 비록 우리나라에서 JDK 1.6이 사용되기 시작한 상황이기는 하지만, 아쉬움이 많이 남는다. 올해는 Lamda식 표현(JSR 335, http://openjdk.java.net/projects/lambda)을 익혀볼까 하고 있다.

어디선가 JCO 발표 주제와 발표 내용에 대한 글이 올라온 것을 보기는 했는데, 무심코 지나친 결과치고는 '참혹했다'는 생각이든다. 쩝.
나와 비슷하게, 상당히 많은 사람들이 발표제목과 발표자만 보고 세션을 선택해서 듣는 이들이 많을텐데(당일, 발표장소에서 발표내용에 대해서 확인할 수 있는 정보를 제공하는 그 어떤 것도 없었다. ㅡ_-)> 요즘 유행하는 긴 디스플레이로, 각 발표회장별 발표제목과 발표자, 발표내용을 보여줘도 되었을텐데...) 적잖게 실망했다는 이야기들을 들을 수 있었다. 처음 참관한 동생은 '우와, 이런 게 있는지 몰랐어요.'라며 신기해하기도 했다.

'무료'로 보는 컨퍼런스면, '그런대로 들을만 했어.' 라고 넘어갈 수 있다.
그러나 '유료(아마, 조금씩 관람료는 오를 것이다. JCO 컨퍼런스를 해외 개발 컨퍼런스처럼 고급화하겠다는 이야기를 들었을 때, '관람료가 오르겠군.' 이라는 생각을 했으니까.)'로 보는 컨퍼런스로서는, '쩝...'하는 생각이 든다. 조금도 양질의 컨퍼런스로 만들고자 한다면 신경써야할 부분들이 많다는 생각을 하고 있다. 발표자를 모집하는 게 아니라 요청하면 어떨까? ㅡ_-)?
특정한 주제를 가지고 컨퍼런스를 진행하려고 했다면, '주제'에 맞게 '분야'선정하고 그 '분야'별 '기술적 흐름이나 유행'을 파악하여 '발표거리'를 선정하고, 각 '발표거리'에 적합한 '전문가'를 선정하여 그들에게 발표를 요청하는 것이 적합하지 않을까?
'유료'에 대해서는 불만이 없다. '정보'를 얻기 위해서는 그만한 댓가를 지불해야한다고 생각한다. 그러나 '유료화'가 되면 돈을 내고 들을 만한 값어치가 있어야 한다고 생각한다. 이에 대해서 조금 더 고민해주었으면 좋겠다.

컨퍼런스가 끝나고 쥐뿔(Google+)에서, 이번 JCO는 어디에서(소셜미디어, SNS라는 단어보다 맘에 드는 소셜미디어, 대부분의 공개되어 있는 네트워크 서비스들은 정보전달매체로서 활용된다는 점에서보면 소셜미디어라고 퉁쳐도 되지 않을까?)도 관련한 소식을 들을 수가 없다는 것이었다. 그 흔한 트위터 해시태그 #JCO 로 나온 이야기가 없다는 것도 아쉽기는 하다. 우리나라 개발자들이 생각보다 소셜미디어를 활용하는 사람이 없다는 점도 나로서는 신기하기도 하다. ㅡ_-)> 블로그를 운영하고 있다고 하면 그걸 신기해하는 사람들도 상당히 많고...
세미나나 컨퍼런스에 가면 알고있는 개발자들을 만나서 이런저런 이야기를 나누는 재미가 있다. 소셜미디어를 통해서만 알고 지내던 사람들을 만나는 재미도 있다. 실제로 얼굴을 대면하면서 만나기는 어렵지만, 스마트폰을 놓지 못하고 사는 개발자들이 소셜미디어를 통해서 서로의 생각을 나누고 친해질 수 있다면 좋지 않을까? 

사진출처 : 한국자바개발자협의회(JCO) https://www.facebook.com/groups/jco.or.kr/



 

 기타  

 

* 해쉬태그 활용하기 : http://twitteran.com/26

* 한국자바개발자협의회(페이스북 그룹) : https://www.facebook.com/groups/jco.or.kr/

* 한국자바개발자협의회(티스토리 블로그) : http://jcoorkr.tistory.com/32

* JCO 컨퍼런스 페이지 : https://www.facebook.com/jcoconf

* JCO 컨퍼런스 접수페이지 : http://jco.zdnet.co.kr/

JCO 관련 사이트는 찾을수록 여기저기 흩어져서 나오네. ㅡ0-);;


+ Recent posts