Java 7이 개발자를 위해 준비한것은?

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:December 7, 2020

자바가 오라클로 넘어간 후 첫 메이저 업데이트 버전인 자바 7에서 바뀐 점은 무엇일까? 그리고 앞으로 변하게 될 방향은 무엇인가?에 대해 생각해보는 글 입니다. Java SE 7 발표 후 심각한 버그 덩어리(?)를 안겨주었지만 개선되고 변화된 점들도 많고 앞으로 Java가 추구하게 될 방향에 대한 시발점이 될 것으로 보입니다. 물론 이 내용들이 국내에서 실무상에 일반적으로 논의 되는건 몇년 뒤의 이야기가 될 수도 있겠지만 우리나라에서만 평생 일하게 될지 어떨지 알수도 없고 개인적으로도 그건 바라지 않기에 🙂 한번 짚고 넘어가 보도록 합시다!

자바 커뮤니티 내부의 정치적 문제와 연기된 다수의 신기능들

자바의 아버지 제임스 고슬링의 2010년 오라클 퇴사 그리고 아파치 재단과의 불화 및 각종 커뮤니티 내부의 갈등 등으로 별다른 진전없는 5년을 보낸후 마침내 Java SE 7이 발표 되었습니다. 어찌 되었건 오라클은 이런 문제들을 이제는 어느정도 정리하고 극복해 낸 것으로 보입니다.

5년의 노력에도 불구하고 Java SE 7은 처음 계획되었던 것과는 많이 다른 모습으로 발표되었습니다. 최초 JDK 7에서 계획 되었던 수많은 계획들은 2012년 발표 예정(?)인 JDK 8으로 연기되었으며 Java SE 7은 어쨌든 2파트로 나눈 릴리즈의 첫번째 제품이 되었습니다. 상황이 이렇다 보니 Java SE 7은 잠시 거쳐가는 버전으로 보이는건 어쩔 수 없는듯 합니다.

연기된 기능들 중에는 멀티코어 프로그래밍을 위한 자바의 람다표현식이나 클로저기능, 모듈러 프로그래밍을 위한 언어와 VM 지원 그리고 JDK의 모듈 시스템들이 있습니다. 많은 기능들이 빠진것에도 불구하고 Java SE 7은 유용한 새 기능들을 제공하고 있습니다.

다음에 언급할 내용은 Java SE 7에서 제공하는 새로운 주요 기능들 입니다.

동적 언어들의 지원

Java SE 7의 주요 기능으로는 JRuby와 Groovy 같은 언어의 출현으로 인해 최근 JVM에서 눈에 띄게 된 동적 언어에 대한 편의성 제공을 들 수 있습니다. 예를 들어 새로운 InvokeDynamic 기능은 동적인 형태로 정의된 객체 지향 언어들의 구현을 지원합니다. JSR-292에 따르면 InvokeDynamic 바이트코드는 정적인 형태의 정보 없이도 효율적이고 유연한 메소드 호출을 수행할 수 있다고합니다. 이러한 동적 언어의 지원은 Java 생태계를 확장하는데 있어 Java SE 7의 매우 중요한 기능으로 볼 수 있습니다.

향상된 멀티코어 그리고 병렬처리 지원

Fork/Join 프레임웍으로부터 시작된 멀티코어 대응의 API는 개발자들이 작업을 다중 프로세서 코어를 이용하여 병렬 수행하는데 있어 좀더 손쉽게 작업을 분배할 수 있도록 도와줄 것입니다. 이는 개발자들이 다중 코어 프로세서를 좀더 잘 활용할 수 있도록 도와줄 것입니다.

개발자 생산성을 위한 컴파일러 최적화

개발자의 생산성 향상에 대한 지원으로 Project Coin을 통한 일반적인 프로그래밍 작업의 단순화와 줄어든 코드와 같은 언어상의 변화가 제공됩니다. 이는 구문을 명확히 하고 코드의 가독성을 높여줄 것이라고 합니다.

Project Coin의 생성자 호출을 위한 다이아몬드 구문은 컴파일러가 타입변수를 명시적으로 기술하지 않더라도 추론을 통해 찾을 수 있도록 하며 try-with-resources 문(하나 이상의 자원을 선언하는 try 구문, 여기서 자원은 프로그램이 끝날때 반드시 닫혀야 하는 객체임)은 파일, 소켓 그리고 DB커넥션과 같은것을 닫는걸 잊더라도 컴파일러에서 자동으로 닫힌 안정적인 코드를 생성합니다.

* Project Coin과 관련하여 별도의 게시물을 작성할 생각입니다.

File I/O, 그래픽 그리고 사운드 향상

Java의 아버지 제임스 고슬링은 파일 시스템 기능중 하나인 NIO2를 특별히 좋아한다고 밝힌적이 있었습니다. 새로운 NIO2의 기능으로 파일 시스템상 좀더 다양한 파일 속성의 작업에 대한 인터페이스를 제공하고 에러와 관련해서도 좀더 많은 정보를 제공한다고 합니다.

네트워크 파일 I/O에 있어 Socket Direct Protocol(SDP) 기능을 중요하게 꼽고 있는데 iSCSI의 경쟁자인 Infiniband에 있어 가상화 환경에서의 진전을 위한 향상된 지원을 할 것이라고 합니다.

Java SE 7은 2D 그래픽 렌더링을 위한 XRender 파이프라인 기능을 제공하며 이는 XWindow 시스템 최상위에서 동작하며 최신 그래픽 프로세서에 접근할 수 있습니다.

Gervill이라 불리는 새로운 사운드 엔진은 리눅스 상에서 다중 어플리케이션이 Audio Synthesis Engine Project MIDI synthesizer를 이용하여 소리를 낼수 있도록 합니다.

마치며..

복잡한 환경속에서 새로운 기능들이 추가된 Java 7이 발표 되었지만 여전히 주변에는 많은 문제가 산재해 있는것 같습니다. 오라클과 구글의 소송에 대한 뭔가 명확하지 않은 상황, 아파치 재단과의 불화 그리고 래리 아저씨의 탐욕은 승리할 수 있을것인가? 이런 사실들은 분명 많은 사람들이 Java에 대해 긍정적일수 만은 없는 상황을 만들고 있는 것 같습니다.

Author Details
Linus Lee aka y1sh former ATiMania.com sysop during 2001-2012. DevSecOps Engineer who likes tech, science, programming and solving problems 🙂
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments