Joshua Bloch와 Neal Gafter가 쓴 "Java Puzzlers : Traps, Pitfalls, and Corner Cases"의 한국어 번역판인 "유쾌한 자바 퍼즐러"가
를 시작했습니다. :)
가 함께 열심히 번역했습니다. 원서 표지는 아래과 같았는데 웹에서 위의 표지에 있는 사진을 구해 표지로 쓰면 어떻겠냐고 출판사에 말씀드렸더니 멋진 표지를 만들어 주셨습니다. 한국어판 표지가 더 멋지지 않나요? ^^;
책에 대한 소개는 역자 소개, 제가 쓴 역자 서문, 창신 형과 상훈 형이 써주신 추천사로 대신하겠습니다. 창신 형과 상훈 형께 정말 감사드립니다!
많은 분들께 유익하고도 유쾌한 자바 퍼즐러가 되었으면 좋겠습니다. Enjoy~!
송치형
충남 과학고를 졸업하고 서울대에서 컴퓨터 공학과 경제학을 전공하고 있다. 코어 로직스에서 데이터마이닝 및 OLAP 엔진, 현대 상선에서 예산 프로젝션 엔진, 컨설팅 업체에서 휴대폰 요금제에 따른 이동통신사 수익률 시뮬레이션 프로그램, 다날에서 룰 기반의 위기관리 시스템과 결제 프레임워크, 중국 휴대폰 결제 시스템을 개발했다. 역서로는 『실전 코드로 배우는 실용주의 디자인 패턴』(사이텍미디어)이 있고, 『생각하는 Big Java』(사이텍미디어), 『리팩터링 워크북』(인사이트) 등을 공역했다. scroco@naver.com이나 innolab.tistory.com으로 연락할 수 있다.
박준상
연세대학교 컴퓨터과학과를 졸업하였으며 현재는 연세대학교 모바일 네트워킹 연구실에서 컨버전스 네트워크를 위한 알고리즘 및 네트워크 설계에 관심을 두고 연구를 하고 있다. 피츠커뮤니케이션에서 싱글사인온 솔루션을 개발하였고, 다날에서 휴대폰 소액 결제 시스템 개발 및 모바일 게임을 개발하였다. 오픈소스 기반의 프로그래밍을 좋아하며, 근래에는 뒤늦게 Ruby의 매력을 느끼고 있는 중이다. joonsang@gmail.com이나 http://joonsang.tistory.com으로 연락할 수 있다.
이 책은 자질구래한 설명이 필요없는 걸출한 엔지니어인 Joshua Bloch와 Neal Gafter가 자바 플랫폼에 있는 다양한 함정에 대해 다루고 있는 책입니다. 더욱이 이러한 함정들이 머리 속에서 만들어 낸 이론적인, 상상 속의 문제들이 아니라, 실제로 JDK를 개발하면서 부딪힌, 그리고 전세계의 개발자들로부터 Sun 사이트에 버그로 리포팅된 문제들로부터 발굴(mining)해 낸 것들이기에 더없이 값집니다. 저 역시 퍼즐 61 덕분에 다양한 날짜 계산을 하는 결제 플랫폼에 있던 버그를 쉽게 잡아낼 수 있던 기억이 있습니다. 저자분들이 이야기 하듯 이 책을 읽고 나면 자바 플랫폼의 여러 함정을 쉽게 피해갈 수 있을 것입니다.
또한 개인적으로 이 책을 읽으면서 좋았던 것이 자바라는 텍스트를 통해 API 라이브러리를 어떻게 설계해야 하는가를 배울 수 있었다는 것입니다. 대부분의 개발자들은 다른 사람들이 만든 API를 사용하는 소비자인 동시에 다른 개발자들이 (혹은 자신이) 사용하게될 API를 만드는 생산자입니다. API 설계는 추상화와 캡슐화가 얼마나 잘되었느지를 보여주는 지표이며, 디자인 패턴 등을 이용한 유연성 획득도 API 설계, 추상화, 캡슐화가 잘 되었을 때 가능한 것입니다. 그러므로 API를 잘 설계할 수 있는 능력은 개발자에게는 정말 중요한 능력이라 생각합니다. 이 책의 각 퍼즐에는 API 설계자들에게 주는 교훈들 역시 풍부하게 수록되어 있습니다. 역시 ‘이렇게 해야 한다’라는 일반론이 아니라 자바 플랫폼에서 건져낸 땅에 뿌리를 둔 값진 교훈들입니다.
많은 개발자분들이 ‘기초가 중요하다’고 말씀하십니다. 이산수학, 프로그래밍 언어론, 컴퓨터 구조, 운영 체제론 등이 기초가 될 수도 있고, 디자인 패턴이나 리팩터링 등이 기초가 될 수도 있습니다. 하지만 자신이 사용하고 있는 언어에 대한 기초 역시 대단히 중요하다 생각합니다. 이론적인 기초가 튼실하면 다양한 언어를 쉽게 배울 수 있는 것이 사실이지만, 특정 언어에 대한 튼실한 이해는 생산성을 높여줍니다. 그리고 자바는 요즘 여러 언어(특히 동적 언어)에 의해 도전을 받고 있긴 하지만 여전히 업계에서 가장 많이 사용되고 있는 언어 중 하나입니다. 또한 “사실(事實)은 사실(死實)인고로 삮여서 빨아 올려야 한다. 이것이 이해(理解)이고 이(理)로써 풀었다(解)는 것이다.”라는 함석헌 선생님의 말씀처럼 사실은 그 자체로는 죽어있는 것과 같습니다. 이 책은 퍼즐을 통해 여러분이 자바라는 텍스트를 삮여 빨아 올릴 수 있도록 도와줄 것입니다.
Java Puzzlers는 썬에서 Java 5의 언어적 대폭 변경을 이끌었던 (하지만 지금은 공교롭게도 둘 다 구글에 있군요 ^^) Joshua와 Neal이 쓴 일종의 퀴즈 모음집입니다. 이미 여러차례 발표를 통해 이 책에 실릴 문제들의 일부가 공개되었지만, 이토록 방대한(?) 양을 자랑할 줄은 몰랐습니다.
수학을 전공한 저로서는 Java Puzzlers가 갖는 도전적인 문제들에 무척 매료되어 번역을 자청하고 싶었지만, 역시나 그 깊이와 분량에 감히 나서지 못했습니다.
그리고 시간이 흘러 절친한 후배이자 왕성한 활동을 보여온 송치형군이 이 책을 번역한다는 소식에 마치 제가 번역하는 것처럼 기뻤습니다. 좋은 책이 번역되어 나온다는 소식은 언제나 반갑지만, 저도 꼭 해보고 싶었던 책, 하지만 우리나라에서 과연 나올까 싶었던 책이 송치형군의 지식과 통찰력을 통해 우리말로 소개된다고 하니 더욱 기대가 됩니다.
최근에 Ruby나 Groovy와 같은 동적 언어가 Java의 대안으로 떠오르고 있지만, 국내외를 통틀어 Java는 가장 많이 쓰이는 언어의 자리를 쉽사리 내어 주지 않으리라 보입니다. 두 저자의 Java에 대한 위트와 혜안이 담겨 있는 이 완전 소중한 책의 우리말 판이 나왔다는 것은, 국내의 두터운 Java 개발자층을 방증하는 동시에 그동안 지나쳐왔던 Java 그 자체에 대해 돌아볼 수 있는 뜻깊은 기회라고 생각합니다.
마지막으로, 이 책, 결코 쉽지 않습니다. 하지만 어려운 문제일수록 푸는 재미도 배가되니까요, 마치 두뇌 트레이닝처럼요.
- 오픈마루 플랫폼 오프너, 이창신
송치형님에게 추천사를 써달라는 제의를 받아 부담을 갖고 무심코 읽기 시작했는데 간만에 투쟁심을 자극하는 책을 만났다. 가끔 다른 책의 추천사에서 ‘비행기 안에서 다 읽어버렸다’는 식의 문구를 볼 때 과장된 표현이라고 생각했었다. 하지만 페이지를 넘길 때마다 정답확인을 통해 일희일비(一喜一悲) 했던 자신을 확인하게 됐고, 정말로 이 책은 ‘저절로 읽혀져 버린 책’이었다.
이 책은 우리가 잊었던 프로그래밍 언어론, 전산기구조, 이산수학 등의 원리를 상기시켜준다. 아마도 이 원리들은 일반 업무에서 잘 사용하지 않아서 잊어져 버리게 된 것 같다. 우리는 매일 많은 정보를 머리에 저장하고 또 그만큼 많은 정보를 잊어버린다. 이 책의 퍼즐을 풀다 보면 ‘아! 맞다. 그렇지..!!’ 라는 탄성을 지르곤 한다. 이 탄성은 우리가 잊어버린 정보가 복원됐음을 알리는 일종의 알람일 것이다. 그리고, 이제 다시 이것들을 잊어버리지 않기를 기도한다.
우리가 개발을 하면서 이해하지 못 했던 버그, 컴파일 에러들을 만나면 대부분 그런 문제들을 정공법으로 해결하지 않고 다른 방식의 코드로 피해가곤 했다. 왜냐하면 그 방법이 더 빠르고 편했기 때문이다. 이 책은 이렇게 우리가 피했던 미지의, 마법의 영역에 대한 설명서이다.
이 책의 장점은 스피디하게 읽힌다는 것이다. 그리고, 이 책을 읽다 보면 묘한 심리적 현상이 생긴다. 답안을 작성하자마자 마치 파블로프의 개처럼 조건반사적으로 자신의 답안을 부정하는 습관이 생기기 때문이다.
그리고 힌트 하나, - 스포일러일 수도 있겠지만 - 이 책의 퍼즐들의 정답은 대부분 ‘컴파일 에러가 난다.’, ‘그렇게 동작하지 않는다’ 이다. 모든 퍼즐들이 그러하듯, 독자가 갖고 있는 상식적인 퍼즐의 정답이 적중하지 못 하기 때문이다. 그렇다고 이 책이 비상식적이라는 것이 아니다. 이 책은 상식 이상의 상식을 다루기 때문에 독자가 쉽게 틀리는 답들로 가득 차 있다.
이 책은 필자를 부끄럽게 하기도 했다. ‘이런 것도 모른 채 여태껏 자바 개발을 해왔다니!!’ 필자는 이 책을 통해 JLS(Java Language Specification)에 대한 무지함을 깨닫게 됐다. 그런 만큼 이 책은 자바언어를 심도 있게 이해하기 위한 좋은 학습서이다. 이 책에서 참조하는 JLS를 그때그때 꼭 읽어보길 권한다. 이 책에서 얻을 수 있는 지식을 두 배로 즐길 수 있는 방법이다.
끝으로 훌륭한 퍼즐을 만들어주신 Joshua Bloch 와 Neal Gafter에게 경의를 표한다. 그리고 저자의 위트 있는 메시지를 생생히 전달해준 송치형님과 박준상님에게 감사한다.
아마도 당신이 이 책을 완독했을 때 당신의 자바 실력은 한 단계 이상 업그레이드 될 것이다.
- ㈜다날 해외 개발팀 팀장, JCO 부회장, 최상훈