|
JAVA는 처음 접한 1995년 부터 참 재미있고 미묘한 언어다. (그 이전에 Oak 시절은 잘 모르니 Pass). 언어의 태생 자체가 가전제품에서 사용하려고 만들었지만 인터넷 초창기에 애플릿(Applet)으로 관심을 끌더니 또 어느 순간에 웹 프로그래밍 언어로 변신을 하고, 아직까지도 주류 언어로 버티는 것을 보면 말이다. (이런 끈질긴 생명력에는 낯설었던 객체지향을 적용해서일지도.. 사실 객체지향에 대해서도 할말은 많지만…-_-, 더불어, Write once, Run anywhere는 지금 생각해도 참 잘 만든 모토인듯.. ). 자바는 나의 제대로 된 첫번째 개발언어이다. 그 이전에 C/C++를 사용하기는 했어도 학습 차원이었고, 회사에 입사하고서는 JAVA가 10년 이상 나의 주된 개발 언어였다. 자바 버전 1.2 ~ 1.4였을 때로.. 그때까지만 해도 지원되지 않는 API가 많이 부족해서 꽤 고생했던 기억이 난다. (Visual C++의 API 레퍼런스는 두꺼운 책 5권인가 6권이었는데.. ㅋㅋ 자바는 기본적인 것 외에 뭔가 세밀한(?) 구성을 하려면 좀 힘들었던…그래서 Wrapper를 써서 개인적인 API를 엄청 많이 만들기도..) 그래도 당시 UMTS에서 사용하는 통신 서비스 환경(SCE) 도구를 GUI로 만드는 작업은 힘들지만 꽤 재미있었던 기억이다. 동시에 여러 동작을 처리하기 위해 Thread니 synchronized, wait(), notify(), notifyAll(), start(), run(), sleep() 등을 사용하며 머리가 아팠던 기억도 함께 있지만 말이다. 그 후 PC용 애플리케이션 개발에서 Mobile Phone에 들어가는 JVM 관련 업무로 바뀌면서 다루는 JAVA 버전이 Standard Edion에서 Micro Edition으로 바뀌고 CLDP, MIDP, JSR 등을 다루면서 몇 년을 보내다 지금은 프로그래밍은 손을 넣고 있지만 가끔은 열심히 프로그래밍하던 때가 내가 가장 열심히 뭔가를 했던 때가 아닌가 하는 생각이 든다. 당시 프로그래밍을 하던 때에 가장 큰 난제 중 하나는 여러 작업을 동시에 수행하면서도 자원을 효율적으로 사용하고 데이터의 일관성을 유지하는 방법이었다. 특히, 테스트를 하다 보면 Race Condition이나 Deadlock이 발생하면 정말이지 해결이 너무 너무 어려웠던 기억이 난다. 지금에 서야 말하지만 당시에는 당장의 결과를 위해 개념을 이해하면서 차근차근 개발하기 보단 어떻게 하든 돌아가는(?) 프로그램을 만들기 위해 Trial & Error를 통해 개발을 진행하는 경우도 많아서 내가 진짜 제대로 개발을 하는지에 대한 일종의 자괴감은 느낀 적도 꽤 있다. -_- 이 책 "모던 자바 동시성 프로그래밍"은 자바 개발자라면 마음 한 구석에 응어리진 궁금증을 풀어주는 책이다 (적어도 나의 경우엔..). 1장을 보면 자바에서의 동시성 기능에 대한 히스토리를 설명하면서 기본적인 개념을 이해할 수 있게 해준다. 더불어, 2장에서는 가상 스레드에 대해 설명한다. 사실 가상 스레드는 내가 자바 프로그래밍과 멀어진 이후 버전에 새롭게 추가된 내용이지만 코드를 보면 전통적인 접근 방식과 비교해 이해가 빨라지는 것 같다. 3장은 가상 스레드를 직접 구현하는 일종의 심화학습(?)으로 생각하면 된다. 4장 이후는 보다 본질적인 내용들로 구성되어 있는데.. 생각할 거리가 좀 있어서인지 책의 진도를 빼기 약간 힘들지만..그래도 꾹 참고 한번은 읽어봐야 하는 내용들이다. 이 책은 자바로 먹고 산다면, 아니 먹고 살고 싶다면 중수와 고수를 나누는 데 도움이 되는 내용들이 많으니 다소 시간이 걸리더라도 자바 개발자라면 일독이 필요한 듯 하다. 더불어, 프로그램은 머리가인 손으로 한다는 저의 멘토에 지론에 따르면, 이 책의 예제 코드는 꼭 한번 리뷰해서 실행해 보는 것을 추천.. 머리로 아는 것과 실제로 수행되는 것과는 꽤 차이가 있으니.. 그 과정에서도 꽤 많은 것을 얻을 수 있다. 마지막으로, 프로그래밍/기술 관련 책은 희한하게도 초보자용과 상급자용만 있고 초보자가 더 상급자로 가는데 도움이 되는 중급자용의 책은 매우 드문데.. 이 책은 초보자를 벗어나 더 성장하기 위한 개발자들을 위한 성장의 징검다리 같은 책이다. |