자바 7에서 관심 있는 부분과 아쉬운 점

오늘, 7월 7일, 드디어 자바 7이 발표된다. (프로그래머들에게 별 관심도 받지 못한) 자바 6가 발표된 지 5년 만이다. 일반 개발자들에게는 "뭐야! 또 새로 나온거야?"라는 소리를 듣기는 하지만 내겐 자바가 그리 빠르게 성장한다는 느낌이 들지는 않는다. 물론 꼭 자바 언어가 변해야 하느냐는 얘기도 있다. 그런데 그렇게 주장하는 사람들은 이제 자바의 역할을 끝났으니 그루비나 스칼라 같은 다른 언어로 갈아 타라고 결론을 내리는 편이라서 일단 배제하겠다. (아! 지금 아는 걸로 천년 만년 먹고 살고 싶다는 사람도 있다. 나도 그러고 싶지만 이 업계가 이런 나태함을 허락하지 않으니 아쉽다. 사실 그런 업계라면 내겐 별 매력이 없다).

그런데 나는 이번 7이 그다지 성에 차지 않는다. 사실 자바 6.5라고 해야하지 않나 싶은데, 내가 투덜 거린다고 바뀔 것도 아니고, 곧 8을 내 놓겠다고 하니 지구 폭파 버튼은 조금 더 두고 보고 누를 생각이다.

암튼 이번 발표에서 관심이 가는 부분과 아쉬운 부분을 발표 전에 정리해 보겠다.

관심 가는 개선 사항

직업이 프로그래머다 보니 우선 언어의 변화에 관심이 가장 크다. 그동안 코인이란 이름으로 진행되던 소규모 언어 개선(JSR 334) 프로젝트 결과물 중 몇 개가 이번 자바 7에 포함된다.
  • switch문에 문자열 사용 - 뭐 좋아하는 사람도 많겠지만, 난 워낙 switch문을 잘 안 쓰니 그냥 그런가보다 싶다. (혹시 toString()으로 스칼라의 패턴 매칭 흉내 내려는 사람 없겠지?)
  • 이진 정수 리터럴과 숫자 리터럴에 밑줄 기호 사용 - 난 이거보다 short나 byte 형 리터럴 표기 방법을 원한다! 상수에 타입 변환을 해야 하다니!
  • 다중 예외 포획(-_-)과 정밀 재투척(-_-) - 아주 반갑다. 평소에 많이 아쉬웠다.
  • 지네릭 객체 생성시 타입 추론 - 아~ 쪼잔해... 자바는 힌들리-밀러 타입 추론을 도입하라!
  • 자동 자원 반환 - 좋은 기능이고 편하긴 하겠지만 자원을 반환해야 한다는 사실을 모르는 개발자는 이 구문도 모를 게 분명하다. 그리고 비대해진 try(...) 문이 가분수처럼 느껴진다.
  • 다중 인자 메서드 호출 단순화 - 잘못한(?) 놈은 놔두고 엄한 사람 보고 뭐라 그러는 문제 해결.
그 다음은 동시성 패키지 개선! (더그 리 교수님! 사랑합니다! OpenJDK에서 잘 부탁해요).
  • ForkJoinPool - 단연 기대 된다. ForkJoinPool은 비동기 실행을 해주는 ExecutorService의 새로운 구현체인데 비동기로 작업을 실행하되, 작업이 클 경우 여러 하위 작업으로 나눠서 여러 쓰레드에서 동시에 실행하도록 하는 프레임워크를 제공한다. 큰 작업을 나눠서 정복하기 방식으로 처리하면서 멀티 코어 CPU를 충분히 활용할 수 있다.
  • Phaser - CyclicBarrier와 CountDownLatch의 역할을 더 유연하고 범용적으로 사용할 수 있는 다중 쓰레드 동기화 관리 장치다. 부정 출발하는 쓰레드는 실격! 먼저 들어가기 없기! 중간에서 우리 만나! 등등
  • TransferQueue - 소비자와 생산자를 직접 만나게 해주는 직거래 장터... 같은 메시지 큐... 랄까...
  • ThreadLocalRandom - 다중 쓰레드 환경에서 더 효율적으로 돌아가는 Random 클래스. ThreadLocal에 각기 다른 Random을 넣어도 비슷하지만 ThreadLocalRandom은 초기화를 공유한다.
스크립팅 지원!
자바 6에서는 아파치 BSF와 비슷한 기능이 JVM에 추가되는 수준의 스크립팅 지원이었을 뿐인데 자바 7에서는 JVM 기반 스크립트 언어(정확히는 동적 타이핑 언어)를 만드는 데 필요한 *엄청난* 기능이 VM에 반영된다.
지금의 자바에서는 절대 필요 없는 Continuation, Tail recursion 같은 기능이 JVM에 추가되고 동적 메서드 호출도 빨라진다. 이제 JVM은 (언어로서의) 자바만을 위한 VM이 아니라고 할만하다. (그동안 JVM에서 다른 언어 구현하느라 삽질한 분들에게 박수를...)

하지만!

이렇게 좋아진 자바 7이지만 내가 쌍수들어 반가워하지 않는 이유가 있다. 원래 자바 7에 포함되기로 했던 몇가지가 자바 8로 미뤄졌는데 그것들이 정작 내가 기대했던 부분이기 때문이다. 물론, 이 개선 사항들이 다음 버전으로 연기됐기 때문에 7이 지금 나올 수 있었던 것이고, 나머지를 빨리 마무리 해서 원래 계획에 없던 8로 내놓겠다고 하기는 했다. 그래도 그게 약속처럼 빨리 나올지도 모를 일이고... 아쉬움을 어쩔 수 없고... 그래서 이번 출시 판 번호는 7이 아니라 6.5라고 혼자 얘기해본다. (투덜투덜)

그럼 내가 기대했던 특징이 뭔지 나열해 보겠다. 
  • 자바 모듈화 지원 : 드디어 자바에 모듈 기능이 들어간다. 모듈화 지원 스펙인 JSR 294 때문에 언어, VM, API에 변화가 생기고 JDK 자체를 모듈화하는 Jigsaw 프로젝트의 결과가 반영된다. 자바 애플리케이션의 복잡도를 제어할 수 있는 모듈화 기능이 들어갈 뿐 아니라 컴포넌트 배포 환경에 변화가 생길 수도 있다.
  • 컬렉션 리터럴 : List, Set, Map을 리터럴로 표현할 수 있다. 빌더를 사용해서 회피하려고 해 보지만 컬렉션 초기화는 정말 귀찮다.
  • 람다(클로저) 지원 : 무슨 말이 필요할까. 다른 언어가 "우리는 클로저 된다!" 그러면 자바에서는 "엄마~ 우리는?" 했었는데 자바에 드디어 클로저가 들어온다. 스프링의 탬플릿-콜백 패턴은 이제 더 강력해진다.
-------
 
점심 시간에 잠깐 정리해서 올리려고 했는데 이런 저런 일로 마무리 못하다가 대충 정리해 올린다. 젠장!
 











 

by 박성철 | 2011/07/08 01:58 | 프로그래밍 이야기 | 트랙백 | 덧글(10)

트랙백 주소 : http://gyumee.egloos.com/tb/3196932
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by rath at 2011/07/08 07:08
앗 드디어 Java 7이 나오는군요. 좋은 글 잘 읽었습니다. ^^
Commented by 박성철 at 2011/07/08 09:01
이미 베타 쓰고 계실 거면서!
Commented by 홍민희 at 2011/07/08 07:31
InvokeDynamic도 빅 뉴스예요. Tail recursion이 지원되니 이제 Clojure는 recur 매크로를 쓰지 않아도 암시적으로 TCO를 해줄 수 있겠군요. (근데 일부러 냅둘 것 같음.) Continuation 지원 환영합니다!
Commented by 박성철 at 2011/07/08 09:03
InvokeDynamic을 메서드 호출이 빨라진다고 표현한 부분에 녹였는데 제가 잘 몰라서 엄청난 기능을 축소했나보군요!
Commented by 오리궁디 at 2011/07/08 08:10
자바7에는 이런 기능들이(제겐 모르는 용어가 더 많네요. ^^) 추가된거네요. 좋은 글 감사합니다.
Commented by 박성철 at 2011/07/08 09:03
사실 개발자들이 체감할 수 있는 부분은 많지 않은 듯 합니다.
Commented by 네피림 at 2011/07/08 11:14
요즘 블로그 글이 자주 올라와 즐겁습니다. 자동 예외 포획, 정밀 재투척, 먼저들어가기없기!, 중간에서우리만나! 등은 확~ 와 닿는 용어군요. 들어도 알수 없는 용어들 보다 훨씬 좋아요. (장기하와 얼굴들의 '우리지금만나'도 떠오릅니다.) 그런 의미에서 SBE의 힌들리-밀너 다시한번 고고할까요?
Commented by regen at 2011/07/08 12:34
으아니, 나오는구나!
Commented by 꾸우 at 2011/07/08 16:45
좀 더 알아봐야겠어요. 좋은 소식 감사합니다.
Commented by 오리대마왕 at 2011/07/10 13:38
저도 번역중인 내용에 다중 예외 포획(-_-)과 정밀 재투척(-_-)을 보면서 반가웠고, 자동 자원 반환은 좀 갸우뚱 했어요.

Tail recursion 오홍홍~ (그러나 recursive한 method를 만들어서 사용해본 적이...)

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶