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도 어서 나와서 좀 더 편한 프로그래밍 세상이 되었으면 좋겠다.

SwingX 라는 오픈소스 프로젝트가 있는데, 꽤 오랫동안 0.9대 버전으로 개발되어 오다가 이번에 1.0 버전이 릴리즈되었다.

SwingX는 java의 기본 swing을 랩해서 조금 더 기능이 풍부한 UI 구현들을 제공하는 프로젝트이다.
java로 데스크탑 애플리케이션을 만드는 경우는 그렇게 많지 않지만, 만약 그런 일을 접하게 되면
기본 swing으로 뭔가 부족하다 싶을 때 swingx에 혹시 원하는 기능이 있는지 찾아보고 그런 기능이 있다면 직접 구현하는 수고를 덜 수 있다.

JRE 1.6.10부터 제공되는 Nimbus 룩앤필(개인적으로는 스윙에서 처음으로 그나마 봐줄만한) 역시 이 swingx 프로젝트에서 시작해서 JRE에 통합되었다.


이미 기존에 만들어둔 GUI애플리케이션이 있다면 룩앤필을 설정하는 코드 몇 줄만 추가함으로써 별 다른 수고 없이 더 보기좋은 UI로 탈바꿈 시킬 수 있다.

MFC로 GUI 프로그래밍을 하게되면 객체에 변경을 가하기 위해 주로 상속을 하거나 서브클래싱을 하게되는데 swing에서는 인터페이스를 구현하는 방법이 많이 사용된다.

C++ 프로그래밍을 하게 되면 COM같은 특수한 분야를 다루지 않는 이상 인터페이스를 구현하는 일이 그다지 많지 않지만, 자바에서는 곳곳에서 쉽게 찾아볼 수 있다.

인터페이스를 설계 및 구현하고 또 변경하고 싶은 기능들만 오버라이딩하여 잘 동작하게 될 때의 기쁨은 어쩌면 객체 지향 프로그래밍의 가장 큰 즐거움 중에 하나일 것이다.
나는 C++을 하는 동안 그런 느낌을 한 번도 느껴보지 못했는데, 자바로 프로그래밍을 하면서 많은 것을 배우고 재미를 느끼는 중이다.

인터페이스가 뭔지 혹은 가상함수가 뭔지에 대한 내용은 어려운 내용이 아니라서 쉽게 배울 수 있지만
인터페이스를 언제 사용해야 할지, 왜 사용해야 하는지에 대한 깨달음은 실제로 많이 사용해봐야만 얻을 수 있는 것 같다.

그런 면에서 객체 지향 프로그래밍을 배우기에는 확실히 C++보다는 자바가 좋은 선택이다.
Speed Java - 8점
한동호/엠플래닝

강컴에서 호평들이 많아 이 책을 선택해서 봤는데, 책 이름과 같이 정말 스피드하게 배워나갈 수 있었다. 필요한 부분만 깔끔하게 설명하고 빨리 진행되는 방식이 아주 마음에 든다.

나는 대학시절에 Java 1.4 책을 한 번 본 것이 전부여서 @ 어노테이션이나 for 문 안에서 : 으로 이터레이팅 하는 문법들이 아주 해괴망칙하게 보이곤 했었는데, 이 책에서는 간략하게지만 내가 궁금해 했던 그런 새롭게 추가된 기능들에 대해서 설명되어 있어 좋았다.

하지만, 스피드하게 배우는 것은 한계가 있는 법.
조금 더 진지하게 Java의 깊숙한 부분을 배워 보려는 사람들은 Thinking in Java와 같은 다른 책을 찾아보는 것이 더 좋을 것이다.


작년 가을 즈음 회사에서, 갑자기 자바로 프로그램을 만들어야 할 상황이 내게 닥쳤다.
이 때 나는 대학 때 만들어본 고작 2000 ~ 3000 줄 정도의 비행기 게임이 자바 경험의 전부였었는데, 아무 것도 모른채로 무작정 프로젝트를 시작했고 그것은 하루 하루 부담스럽고 고통스러운 시간들로서 내게 다가왔다.

우리 회사에는 자바 프로그래머가 전혀 없어서 나는 아주 기본적인 것들까지도 인터넷을 통해 정보를 얻었어야 했는데(애플릿은 뭐고 서블릿은 뭔지, 1.5를 써야하는지 6을 써야하는지, 심지어는 SE를 다운 받아야하는지 EE를 받아야 하는지까지도), Sun의 문서들과 포럼, 그리고 유즈넷을 들락거리면서, 인터넷을 통해 공부하는 것이 책으로 공부하는 것보다 얼마나 어려운 것인지 절실히 깨닫게 되었다. 물어볼 사람이 옆에 있다는 것이 얼마나 행복한 것인지도 말이다.

어쨌거나 급하고 초조한 마음과 함께 나혼자 진행한 프로젝트는 책으로 지식을 쌓지 못한채 인터넷을 통해서 얻은 제대로 익히지도 못한 지식들로, 검색과 질문과 코딩의 반복, 또 삽질과 문제 해결 그리고 새로운 고비의 반복들을 거쳐 힘들게 완성시켰다.

최근들어 Java 세상을 덮친 Eclipse와  이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac 같이 가볍게 읽어볼만한 책들이 많이 나왔는데 이책과 함께 읽어보고 어느 정도 자바와 그 친구들을 알게 된 후에, 나는 당시 프로젝트의 시작부터 끝까지를 완전히 머리속에 그려놓지 않은채 무작정 덤벼들었던 내 모습을 기억하고는 얼마나 무모했었는지 떠올려보게 되었다.

당시 나는 최신 버전이라는 이유로 별 생각없이 Java 6 플랫폼을 선택해서 개발을 했는데,
서버 프로그램도 아니고 클라이언트에 내려주는 애플릿 프로그램으로서 그것은 참 안좋은 선택이었다.

또, 후에 안 것이지만, SWTJava Web Start 같은 기술도 있었는데, 어떤 것이 나을지 비교도 해보지 않고 바로 스윙애플릿을 선택한 것도 내 무지함이었고 말이다.( 어떤 기술이 있는지 정도는 알고있어야 뭘 비교해볼 것 아닌가. )

프로젝트에 충분한 기술적 검토없이 무작정 덤벼드는 것은 좋지 않다.
그리고 기본기는 인터넷보다 책으로 다지는 것이 좋다.

이 책은 자바의 깊숙한 부분들을 설명하지는 않지만, 꼭 필요한 부분들만을 가볍고 쉽게 읽혀지도록 쓰여졌다는 점이 높이 평가 할만하다.

이 책과 함께 위에서 잠깐 언급한
Java 세상을 덮친 Eclipse
이클립스 프로젝트 필수 유틸리티 : subversion, Ant, JUnit, Trac 역시 추천한다.
내가 잘 알지 못한채로 사용해 왔던 것들의 많은 부분이 위 책들에 담겨있었다.
사실은 위 책들도 각각 서평을 쓰려고 했는데 막상 쓰려니 귀찮아져버려서 그냥 이렇게 넘어간다.

Java는 주위에 배워야 할 잡것들이 너무나도 많아서 날 피곤하게 한다.
오늘 컴퓨터 프로그래머(CPQ) 자바 1급 시험을 보고 왔다.
이 시험에 대해서 알고 있는 사람은 아마도 많지 않을 것 같다.

한국 정보과학회에서 주관하고 있다고 하는데, 이 곳에 가면 정보를 얻을 수 있다.

나는 리눅스마스터라는 시험을 통해 우리들에게 어느 정도 알려져 있는 한국정보통신인력개발센터에서 이런 시험이 있다는 것을 알게 되었는데, 이 곳을 통해서도 역시 지원 신청을 할 수 있다.

한국정보통신인력개발센터에는 멤버쉽 제도라는 것이 있는데,
우수회원이나 특별회원들에게는 여러 특전이 있다.

그 중 하나는 1차 시험 응시료를 면제해 주는 것인데, 이 CPQ시험은 2차 시험이 없으므로 우수 회원 이상이라면 무료로 응시 할 수 있다.

나는 특별회원이라서 가끔씩 심심풀이로 무료 시험을 보러 가곤 하는데,
시간도 많이 들지 않고 자격증도 덤으로 생기게 되는 꽤 유익한 일이다.

오늘 시험은 동국대학교에서 봤다. 나는 동국대 하면 이동국밖에는 생각나지 않았었는데,
오늘은 확실히 동국대에 대한 이미지를 굳혔다.
추운 날씨의 일요일임에도 불구 하고 많은 학생들이 나와 공부를 하고 있던 모습이 인상적이었다.
허름한 건물 외관에 비해 내부 시설들은 꽤 잘 되어 있었다.

이 시험의 난이도는 그다지 어렵지 않다.
나는 C++ 1급과 Java 1급 시험을 치루어봤는데, 둘 다 대학교 때 배운 지식 정도면 충분히 합격할 수 있는 시험 수준이다.

시험 문제에 대해서는 마음에 안드는 점이 몇 가지 있다.
지난 번 C++ 시험을 볼 때에는 예문에 있는 코드가 오타 였는지 인쇄가 잘못된건지 모를 컴파일도 안되는 이상한 코드가 있었고,
오늘 자바 실기 시험에서는 위의 이미지를 보고 아래 Swing 코드를 작성하시오. 뭐 이런 문제가 있었는데, 그 이미지는 깨져서 보이지도 않았다. 어쩌라고.
이미지 주소를 보니 10.x.x.x/어쩌구 로 내부아이피로 되어 있었는데,
아마도 IHD 사무실 내에서만 테스트 한 번 해보고 시험지인 동국대로 가져와서는 정작 테스트 한 번 해보지 않고 그냥 문제를 바로 배포했는지도 모르겠다.

이런 것들은 주최측에서 조금만 신경쓰면 충분히 보완될 수 있는 문제인데 -그리고 당연히 그래야한다.
아직 그런 것 조차 신경 안쓰는 걸 보면 국가공인 자격증이 되기에는 10년은 걸릴 듯 하다.

또 한 가지 맘에 안드는 점은 문제의 20% 정도가 다른 주제의 내용이라는 것이다.
아니 자바 시험 보는데 퀵 소트하고 머지소트에 대해서 왜 물어보며 폭포수 모델 같은 건 도대체 왜 나오는 건지 모르겠다.
어디 80년대 국가고시에나 나올 법한 이런 썩어빠진 문제들은 빨리 없어져야만 한다.
좋은 자바 문제 고르기에도 바쁜 판에 자료구조하고 소프트웨어 공학은 왜 껴넣는 건지.

이런 점들이 빨리 개선되어 훌륭한 국가 공인 자격증으로 인정 받게 되기를 진심으로 바란다.

기존 기출 문제들은 이 곳에서 확인 할 수 있다.
http://exam.ihd.or.kr/pds/getFile.asp?id=869&tb=tbl_PDS_040100&code=
http://exam.ihd.or.kr/pds/getFile.asp?id=838&tb=tbl_PDS_040100&code=

멤버쉽 제도에 대해서 관심이 있는 사람들이 있을 것 같은데,
다음 링크에서 확인 할 수 있다.
http://exam.ihd.or.kr/exam_community/commu_01_2.htm
무료 응시 뿐만아니라, 시험 감독이나 시험 채점등의 재밌는 아르바이트 또한 할 수 있다.
상반기, 하반기 2회 뽑는데, 자격요건이 된다면 신청기간에 간단한 자기소개서를
제출하면 된다.

자바 버전 히스토리

2008. 11. 25. 18:55 | Programming
자바로 애플리케이션을 개발하다보면, 버전 때문에 골치가 아플 때가 많이 있다.

나는 자바 6으로 처음 애플리케이션을 만들어봤는데, 예전 버전들이 언제쯤 발표된건지, 6으로 개발 했을 때 사용자들이 문제없이 내 애플리케이션을 쓸 수 있을 지 항상 궁금했었다.
오늘은 드디어 자바 버전 히스토리를 찾았다.

http://en.wikipedia.org/wiki/Java_version_history

1.6이 2006년에 발표된 것인지 오늘 처음 알았다.
1.5가 2004년에 발표되었었다는 것도 역시 처음 알았는데, 아직까진 1.6 보다는 1.5으로 애플리케이션을 개발하는 것이 안정적일 것 같다. 미리 알았으면 좋았을텐데 말이다.

그나저나 자바7에서는 또 재밌는 많은 기능들이 생기게 되는 것 같아 기대 된다.

내 첫 자바 애플릿 프로그램 사진 한장.

비즈하드 애플릿