2011년 07월 08일
자바 7에서 관심 있는 부분과 아쉬운 점
오늘, 7월 7일, 드디어 자바 7이 발표된다. (프로그래머들에게 별 관심도 받지 못한) 자바 6가 발표된 지 5년 만이다. 일반 개발자들에게는 "뭐야! 또 새로 나온거야?"라는 소리를 듣기는 하지만 내겐 자바가 그리 빠르게 성장한다는 느낌이 들지는 않는다. 물론 꼭 자바 언어가 변해야 하느냐는 얘기도 있다. 그런데 그렇게 주장하는 사람들은 이제 자바의 역할을 끝났으니 그루비나 스칼라 같은 다른 언어로 갈아 타라고 결론을 내리는 편이라서 일단 배제하겠다. (아! 지금 아는 걸로 천년 만년 먹고 살고 싶다는 사람도 있다. 나도 그러고 싶지만 이 업계가 이런 나태함을 허락하지 않으니 아쉽다. 사실 그런 업계라면 내겐 별 매력이 없다).
그런데 나는 이번 7이 그다지 성에 차지 않는다. 사실 자바 6.5라고 해야하지 않나 싶은데, 내가 투덜 거린다고 바뀔 것도 아니고, 곧 8을 내 놓겠다고 하니 지구 폭파 버튼은 조금 더 두고 보고 누를 생각이다.
암튼 이번 발표에서 관심이 가는 부분과 아쉬운 부분을 발표 전에 정리해 보겠다.
관심 가는 개선 사항
직업이 프로그래머다 보니 우선 언어의 변화에 관심이 가장 크다. 그동안 코인이란 이름으로 진행되던 소규모 언어 개선(JSR 334) 프로젝트 결과물 중 몇 개가 이번 자바 7에 포함된다.
자바 6에서는 아파치 BSF와 비슷한 기능이 JVM에 추가되는 수준의 스크립팅 지원이었을 뿐인데 자바 7에서는 JVM 기반 스크립트 언어(정확히는 동적 타이핑 언어)를 만드는 데 필요한 *엄청난* 기능이 VM에 반영된다.
지금의 자바에서는 절대 필요 없는 Continuation, Tail recursion 같은 기능이 JVM에 추가되고 동적 메서드 호출도 빨라진다. 이제 JVM은 (언어로서의) 자바만을 위한 VM이 아니라고 할만하다. (그동안 JVM에서 다른 언어 구현하느라 삽질한 분들에게 박수를...)
하지만!
이렇게 좋아진 자바 7이지만 내가 쌍수들어 반가워하지 않는 이유가 있다. 원래 자바 7에 포함되기로 했던 몇가지가 자바 8로 미뤄졌는데 그것들이 정작 내가 기대했던 부분이기 때문이다. 물론, 이 개선 사항들이 다음 버전으로 연기됐기 때문에 7이 지금 나올 수 있었던 것이고, 나머지를 빨리 마무리 해서 원래 계획에 없던 8로 내놓겠다고 하기는 했다. 그래도 그게 약속처럼 빨리 나올지도 모를 일이고... 아쉬움을 어쩔 수 없고... 그래서 이번 출시 판 번호는 7이 아니라 6.5라고 혼자 얘기해본다. (투덜투덜)
그럼 내가 기대했던 특징이 뭔지 나열해 보겠다.
점심 시간에 잠깐 정리해서 올리려고 했는데 이런 저런 일로 마무리 못하다가 대충 정리해 올린다. 젠장!
그런데 나는 이번 7이 그다지 성에 차지 않는다. 사실 자바 6.5라고 해야하지 않나 싶은데, 내가 투덜 거린다고 바뀔 것도 아니고, 곧 8을 내 놓겠다고 하니 지구 폭파 버튼은 조금 더 두고 보고 누를 생각이다.
암튼 이번 발표에서 관심이 가는 부분과 아쉬운 부분을 발표 전에 정리해 보겠다.
관심 가는 개선 사항
직업이 프로그래머다 보니 우선 언어의 변화에 관심이 가장 크다. 그동안 코인이란 이름으로 진행되던 소규모 언어 개선(JSR 334) 프로젝트 결과물 중 몇 개가 이번 자바 7에 포함된다.
- switch문에 문자열 사용 - 뭐 좋아하는 사람도 많겠지만, 난 워낙 switch문을 잘 안 쓰니 그냥 그런가보다 싶다. (혹시 toString()으로 스칼라의 패턴 매칭 흉내 내려는 사람 없겠지?)
- 이진 정수 리터럴과 숫자 리터럴에 밑줄 기호 사용 - 난 이거보다 short나 byte 형 리터럴 표기 방법을 원한다! 상수에 타입 변환을 해야 하다니!
- 다중 예외 포획(-_-)과 정밀 재투척(-_-) - 아주 반갑다. 평소에 많이 아쉬웠다.
- 지네릭 객체 생성시 타입 추론 - 아~ 쪼잔해... 자바는 힌들리-밀러 타입 추론을 도입하라!
- 자동 자원 반환 - 좋은 기능이고 편하긴 하겠지만 자원을 반환해야 한다는 사실을 모르는 개발자는 이 구문도 모를 게 분명하다. 그리고 비대해진 try(...) 문이 가분수처럼 느껴진다.
- 다중 인자 메서드 호출 단순화 - 잘못한(?) 놈은 놔두고 엄한 사람 보고 뭐라 그러는 문제 해결.
- 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)
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tail recursion 오홍홍~ (그러나 recursive한 method를 만들어서 사용해본 적이...)