Media Log

난 정말 JAVA를 공부한 적이 없다구요 - 8점
윤성우 지음, 김문석 감수/오렌지미디어
이 책은 2009년 가을에 나온 비교적 최근의 자바 입문서이다.

나는 윤성우씨의 책을 아주 좋아하는데, 굉장히 쉽게 잘 읽히고 또 어려운 내용을 적절한 예를 들어서 쉽게 설명해주기 때문이다.
여태까지 나온 그의 책들은 모두 입문자를 위한 기초서적인데, 개인적으로는 조금 더 심도있는 내용을 다루어주었으면 하는 바램도 있다.

이 책은 책 제목에도 써있듯이 Java를 처음 접해보는 사람을 타겟으로 작성되었다.
대부분의 컴퓨터 언어 책들은 C언어와 비교를 하며 설명하곤 하는데, 이는 C를 알고 있는 사람들에게는 좋지만 그렇지 않은 사람들에게는 전혀 불필요한 설명일 수도 있다.
저자가 이런 독자들의 눈높이에 맞춰서 쉽게 쉽게 설명하려 애쓰는 부분들이 인상적이었고, 또 이것은 영리한 접근 방식이라 생각된다.

챕터마다 간단한 수준의 문제가 주어지고, 저자가 작성한 답안 코드가 있다.
연습문제 수준이 외국 서적들처럼 머리가 빠개지는 수준이 아니라서, 공부하는 학생들이 연습문제를 다 풀어 볼만 할 것 같다.

나는 책 앞의 절반은 다 건너뛰고 뒷부분만 읽어봤는데, 전체적으로 아주 만족스러웠다.
아마도 이 책은 자바의 기본기를 다지기에 가장 좋은 책이 아닌가 싶다.

여태껏 클래스패스나 패키지, 그리고 와일드카드를 사용하는 지네릭 문법은
다른 언어들을 사용해보면서 익혀둔 통밥으로만 대충 이해하고 살고있었는데, 책에 잘 설명이 되어있어서 좋았다.

자바의 I/O Stream 관련 클래스들은 사용할 때 마다 참 매력적으로 느껴진다.
아래 코드처럼 한 객체를 다른 객체와 연결하고 또 연결하고 하면서 프로그래밍 하는 것은 처음 자바를 하면서 많은 흥미를 제공해 주는 부분이면서 클래스를 어떻게 추상화 해야 하는지 가르쳐주기도 한다.
OutputStream os = new FileOutputStream("data.bin");
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);

스트림 클래스들의 역할을 잘 이해하지 못하면 어떤 것을 어디에 껴넣어야 할지 햇갈릴 수도 있는데,
책에서 이 내용들을 아주 잘 설명해주고 있다.

이런 파일과 스트림에 대한 내용은 기본적인 내용이면서 가장 많이 쓰이는 중요한 부분인데 거의 마지막 챕터에 있어서 사람들이 잘 읽어보려나 모르겠다.

쓰레드와 동기화 챕터에서는 쓰레드에 대한 아주 간단한 기초 설명과 함께 동기화에 대한 기본 기법들을 설명한다.
나는 쓰레드를 멈추는 것과 재시작 하는 부분이 꼭 있기를 기대했는데 이 내용이 없어서 너무 아쉬웠다.

예전에 stop과 resume 메소드를 사용 하려고 봤더니 두 메소드 모두 deprecate되어있는 것이 아닌가.

Sun의 문서 중에

위와 같은 내용이 있는데, 왜 아직도 새로운 API를 제공하지 않는지 모르겠다.

책 마지막에는 스윙을 맛뵈기로 다루고 있는데, 스윙에 대한 윤성우씨의 생각이 살짝 언급되어 있다.

윤성우씨는 자바 클라이언트 애플리케이션에 대해서도 찬성하고 있는 입장이다.
나는 예전에는 자바로 만드는 클라이언트는 끝내주겠다 생각한적이 있었는데, 한 번 만들어보고 나서는 생각을 고쳐먹었다.

Once write Run everywhere라지만, 그냥 아무 생각 없이 코딩한다고 해서 모든 플랫폼에서 문제없이 잘 동작하는 것은 아니다.
우리가 윈도우 네이티브 클라이언트 애플리케이션을 작성할 때, 사용하려는 Windows API가 어떤 윈도우즈 버전부터 지원되는지 잘 알고 있어야 하고,
운영체제 버전별로 검사하는 코드 또한 들어가듯이 자바 API역시 지원되는 버전을 항상 다큐먼트에서 찾아봐야 하며, 예외처리도 해주어야만 한다.
또한 많이 쓰이는 특정 플랫폼을 위해 만들어진 전용 API를 사용해서도 안된다.

위 문제는 사실 아주 자잘한 문제이고, 가장 큰 문제는 애플리케이션을 실행시키기 위해서 JRE가 필요하다는 것이다.
한번만 설치하면 되는데 그게 뭔 대수냐 라고 생각하고 있다면, 그 프로그램은 이미 널리 퍼지기는 힘들다.
사용자들은 우리가 원하는대로 좀처럼 움직여주질 않는다.

누군가와 예전에 이런 얘기를 했었는데, 멀티 플랫폼에서 돌아가게 프로그램을 만들려면 차라리 C#이 가장 좋은 선택일지도 모른다는 내용이었다. 그리고 리눅스나 맥은 Mono를 통해서 돌린다. 이것은 꽤 괜찮은 생각일지도 모르며, 이미 이런 프로그램들이 많이 나와있다.(하지만 기대치 만큼 잘 동작하지는 않는 것 같다. 앞으로는 더 좋아지겠지만)

앞으로 Windows XP가 점점 자취를 감출 때 쯤이면 닷넷으로 클라이언트 애플리케이션도 개발할 수 있고, 디바이스 드라이버도 좀 더 편하게 만들 수 있을텐데 나는 이 날이 제발 빨리 왔으면 좋겠다.

아래 페이지는 그간 Java 언어의 변화를 잘 보여주고 있다.

Java7도 어서 나와서 좀 더 편한 프로그래밍 세상이 되었으면 좋겠다.