- 도서 -
모든 프로그래머는 언제나 참조하게 되는 책들을 갖고 있게 마련이다. 아래 책들은 자바 프로그래머라면 반드시 갖추어야 할 것들이다. 값이 비싼 것도 있기 때문에 목록을 의도적으로 줄였다. 아주 필수적인 것으로만.
Thinking in Java (Bruce Eckel)
Thinking in Java, 3rd edition (Bruce Eckel; Prentice Hall PTR, 2002)
Eckel의 책은 매우 실용적이다. 자바에서 객체 지향을 사용하는 방법을 배울 수 있다. 그가 소개하는 개념들은 코드 샘플을 통해 설명된다. 자바가 언제나 올바른 해답이라고 생각하지 않는 사람들에게도 이 책은 매우 실용적이다. Eckel은 많은 언어들을 오랫동안 다루어왔고 확고한 객체 지향적 기술도 겸비하고 있다. 이 책에서 그 기술을 전수하고 있다. 현재 Thinking in Enterprise Java를 집필중이다.
Effective Java (Joshua Bloch)
Effective Java: Programming Language Guide (Joshua Bloch; Addison-Wesley, 2001)
좋은 자바프로그램을 만들기 위한 원리를 이해할 수 있는 책이다. 대부분의 내용은 다른 “자바 배우기” 책들에서 찾을 수 있는 것은 아니다. 예를 들어 overriding equals() 챕터는 내가 읽은 부분 중 최고였다. 추상 클래스 대신 인터페이스를 사용하는 것과 예외를 지능적으로 사용하는 것에 대한 실질적인 조언도 추가했다. Bloch는 Sun의 자바 플랫폼 라이브러리 아키텍트였기 때문에 이 언어에 정통해있다. 사실, 많은 책들을 저술하기도 했다. 이 책은 반드시 읽어야 한다.
The Java Programming Language (Ken Arnold, James Gosling, David Holmes)
The Java Programming Language (Ken Arnold, James Gosling, David Holmes; Addison-Wesley, 2000)
아마도 최고의 자바 서적일 것이다. 정식 스팩은 아니지만 각 언어 기능에 대한 소개가 읽을 만 하다. 엄격함과 교육적인 측면 사이에서 균형을 맞추면서 누구라도 자바 프로그래밍을 빠르게 이해할 수 있도록 했다.
Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)
Concurrent Programming in Java: Design Principles and Patterns, 2nd edition (Doug Lea; Addison-Wesley, 1999)
모든 개발자가 병행성(concurrency)에 대해 알아야 하는 것은 아니고 모든 엔지니어들이 이 책의 수준까지 될 필요는 없지만 이 책만큼 병행 프로그래밍을 잘 다룬 책을 본 적이 없다. 관심이 있다면 읽어보기 바란다. Lea는 SUNY 사의 전문 프로그래머이며 병행성과 관련된 그의 작업과 생각들은 JDK 5.0 스팩(JSR166)에 투영되었다. 자바를 효과적으로 사용하는 방법에 대한 그의 생각은 귀 기울일 만 하다.
Expert One-On-One J2EE Design and Development (Rod Johnson)
Expert One-On-One J2EE Design and Development (Rod Johnson)
J2EE를 처음 접하는 사람들에게, 이 책은 J2EE가 무엇인지를 말해준다. 이 책은 수년간의 경험의 산물이며, 다른 저자들의 책들과는 달리 Johnson은 자신이 경험하지 않은 것은 이야기 하지 않는다. J2EE는 오버킬이 불필요할 때 자주 사용된다. Johnson은 이것을 피하는 방법을 설명한다.
Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)
Refactoring: Improving the Design of Existing Code (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts; Addison-Wesley, 1999)
Fowler는 Analysis Patterns를 비롯하여 가장 대중적인 프로그래밍 책을 저술했다. 코드 리팩토링은 프로그래머 훈련 목록에서는 무시되지만 프로그래머의 직관에 의존한다. 리팩토링은 결과를 변경하지 않고 기존 코드의 디자인을 향상시킨다. 이것은 코드를 깨끗하게 유지하는 최상의 방법이며 언제라도 변경이 가능하다. 언제 리팩토링을 하는가? 코드가 냄새를 풍길 때 마다 리팩토링 한다. Fowler의 책은 자바 코드 예제들로 가득 차 있다. Eclipse를 포함하여 많은 자바의 IDE는 Fowler의 리팩토링을 결합하고 있다.
Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)
Design Patterns: Elements of Reusable Object Oriented Software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides; Addison-Wesley, 1997)
전문 프로그래머들 사이 가장 유명한 책 중 하나이며 "the Gang of Four (GOF) book"으로 알려져 있다. 패턴은 일반적인 프로그래밍 문제들을 생각하고 해결하는 재사용 가능한 방식이다. 패턴을 배우는 것은 훈련이다. 이들을 잘 사용하는 것(또는 패턴을 사용하지 않아야 할 때를 아는 것)은 기술이다. 패턴을 무시하는 것은 실수이다. 이 책의 모든 예제들은 C++로 작성되었지만 자바도 여기서부터 출발했기 때문에 자바 언어에서 패턴을 구현하는 방법은 비교적 간단하다. 패턴에 익숙해지고 잘 사용하는 방법을 알면 프로그래밍이 쉬워진다. 또한 다른 프로그래머들과의 통신도 쉬워진다. 패턴은 일반적인 문제에 대한 일반적인 솔루션에 대해 함께 작업하는 많은 연관된 프로그래밍 개념을 설명하는 지름길이기 때문이다. Factory Method 같은 좀더 일반적인 것으로 유비쿼터스가 있다. 패턴을 효율적으로 사용하는 문제에 대해서는 Joshua Kerievsky의 Refactoring to Patterns을 참조하기 바란다.
Patterns of Enterprise Application Architecture (Martin Fowler)
Patterns of Enterprise Application Architecture (Martin Fowler; Addison-Wesley, 2002)
엔터프라이즈 개발은 작은 일회성 프로젝트 보다 훨씬 어렵다. 모든 엔터프라이즈 개발이 다 새로운 도전이라는 것은 아니다. 사실 하늘 아래 새로운 것은 없다. 많은 경우는 Fowler가 수행했던 프로젝트들이다. 그의 책에서는 일반적인 솔루션에 대해 이야기하고 사용법, 대안 등에 대한 가이드를 제공한다. Fowler는 Model View Controller (MVC) 같은 익숙한 패턴을 넣었고 like Page Controller 같은 비교적 새로운 것도 추가했다. 대부분의 패턴들과 마찬가지로 일단 읽고 나면 이미 알고있었던 것 처럼 생각하게 될 것이다.
UML Distilled (Martin Fowler)
UML Distilled: A Brief Guide to the Standard Object Modeling Language (Martin Fowler; Addison-Wesley 2003)
UML은 전문 프로그래머에게 중요한 시각적인 통신 언어이지만 과용 및 남용되고 있다. UML과 통신에 대해 많은 것을 알 필요가 없다. Martin은 아주 필수적인 것만 전달한다. 사실 대부분은 기본적으로 사용하고 있던 것이다. UML 예제의 모든 코드는 자바 코드이다.
Test-Driven Development: By Example (Kent Beck)
Test-Driven Development: By Example (Kent Beck; Addison-Wesley 2002)
테스트 중심의 프로그래밍은 프로그래밍의 혁명이고 더 나은 프로그래머가 될 수 있는 지름길이다. 코드를 작성하기 전에 테스트를 작성하는 것은 처음에는 어색하지만 강력한 개발 기술이다. 테스트를 먼저 작성함으로서 코드는 더욱 단순해진다. (Beck은 대표적인 테스트 중심의 자바 프레임웍인 JUnit도 공동 작성했다.) Beck의 책은 신뢰할 만한 자료이고 확장된 Money 예제는 자바이다. Beck은 테스트 중심을 생각하는 방식부터 설명한다. 바로 이것이 많은 프로그래머들이 겪는 첫 번째 어려움이기 때문이다.
The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)
The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt and David Thomas; Addison-Wesley 1999)
순수 객체 지향주의자가 된다는 것은 모험이다. 요즘 처럼 복잡한 세상에 어떤 일이든 이루려면 타협을 해야 한다. 가이드 원리는 실용적인 것으로 되어가고 있다. Hunt와 Thomas는 정말로 중요한 것을 타협하지 않고 이 일을 할 수 있는 방법을 이야기 한다. 이것은 자바 책은 아니지만 자바 개발자를 위한 정신 수양 책이라고 할 수 있다.
Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)
Peopleware: Productive Projects and Teams (Tom DeMarco, Timothy Lister; Dorset House, 1999)
이 목록에 있는 다른 책들은 기술적이다. 하지만 이 책은 아니다. 기술적인 전문 용어들 속에서 그리고 약어의 바다 속에서, 소프트웨어 개발자들과 매니저들은 가끔씩 사람들이 소프트웨어를 만든다는 것을 잊는다. DeMarco와 Lister가 그 사실을 일깨워주고 그것이 차이를 만드는 이유를 설명한다. 이것은 실용적인 프로그래밍 책은 아니지만 자바 프로그래머라면 읽어야 한다. 프로그래머들을 위한 끝내주는 책들이 있겠지만 이것 역시 최고이다.
- 웹 사이트 -
찾으려고만 하면 생각보다 많은 웹 사이트들이 있다. 자바 관련 웹 사이트들은 놀라울 정도로 많다. 아래 소개한 사이트들은 진짜이다.
Sun's Java Technology site
Sun's Java language site(http://java.sun.com/)
Sun의 메인 자바 사이트이다. 자바 개발자라면 자주 들르게 될 것이다. 다음 링크는 특별히 중요하다. 특히 신참 자바 개발자들에게는 더욱 그렇다:
New to Java Center
New to Java Center(http://java.sun.com/learning/new2java/index.html)
New to Java Center는 자바 자료들로 단계별로 이끈다. 초보 자바 개발자라면 시작 하기에 좋은 장소이다.
Tutorials and Code Camps
Java Tutorial(http://java.sun.com/docs/books/tutorial/index.html)
유명하지 않은 자바 튜토리얼과 (예를 들어, Collections 같은)자바의 다양한 측면들을 소개한다.
IBM developerWorks
IBM's developerWorks(http://www.ibm.com/developerworks/)
이 글을 통해 developerWorks를 소개하는 것이 쑥스럽긴 하지만, developerWorks는 자바의 툴과 기술에 관련된 튜토리얼과 아티클의 거대한 리소스이다. 초보자 가이드에서부터 고급 병행성 기술까지 다루고 있다. 토픽별, 유형별로 검색할 수 있다.
The Apache Software Foundation
The Apache Software Foundation(http://www.apache.org/)
Apache 사이트는 많은 재사용 가능한 라이브러리와 자바 개발자용 툴의 본산이다. 모두 오픈 소스이기 때문에 원하는 대로 다운로드 받을 수 있다. 매우 대중적인 자바 라이브러리와 툴 (Struts, Ant, Tomcat)은 Apache 프로젝트로 시작했다. Jakarta는 부상하고 있는 자바의 한 분야이다.
Eclipse.org
Eclipse(http://www.eclipse.org/)
좋은 자바 통합 개발 환경은 많이 있다. Eclipse(IBM)은 최신의, 빠르게 성장하고 있는 자바용 IDE 이다. 온전한 오픈 소스이며 무료이다. 사이트에는 Eclipse를 효과적으로 사용하는 방법을 배울 수 있는 모든 종류의 자료들이 있다. Swing의 대안인 Standard Widget Toolkit (SWT) 정보도 수록되어 있다.
Eclipse Plugin Central, EclipsePlugins
Eclipse Plugin Central(http://www.eclipseplugincentral.com/)
EclipsePlugins(http://eclipse-plugins.2y.net/)
Eclipse는 플러그인 아키텍쳐를 기반으로 한다. 사실, Eclipse의 자바 개발 컴포넌트는 플러그인이다. 하지만 Eclipse 환경에서 사용할 수 있는 플러그인은 수백 가지나 된다. 이 두 사이트에서는 이 플러그인을 목록별로 구분하고 있다. 이들은 뛰어난 자료이다. Eclipse를 사용하고 있고 개발 환경에 새로운 어떤 것을 하고자 할 때, 거기에 맞는 플러그인이 있다면 신나지 않겠는가? 두 사이트에서 플러그인들을 리뷰하여 자신에게 맞는 것을 고를 수 있다.
JUnit.org
JUnit.org(http://www.junit.org/)
JUnit은 자바용 단위 테스트 프레임웍이다. 이 사이트에서는 최신 버전들 외에 테스팅 관련 정보를 다양한 레벨별로 소개하고 있다. 데스크탑 애플리케이션, 웹 애플리케이션, J2EE 애플리케이션 별로 설명한다. 테스팅 자료를 찾는다면 이곳이 최적의 장소이다.
TheServerSide.com
TheServerSide.com(http://www.theserverside.com/)
서버측 자바 개발에 관여하고 있다면 이 사이트는 필수 사이트이다. JBoss, J2EE, LDAP, Struts 관련 정보가 수록되어 있으며 검색도 쉽다. 자바의 기능과 지원 라이브러리만을 단순히 설명하지는 않는다. 라이브러리의 고급 사용법도 함께 설명한다. (템플릿 엔진 대신 Jakarta의 Velocity 사용하기). 자바의 현주소에 대한 논평도 기재되어 있다. 이 사이트의 장점 중 하나는 자바 툴과 제품을 비교할 수 있다는 점이다.
Bruce Eckel's MindView, Inc.
Bruce Eckel's MindView, Inc.(http://www.bruceeckel.com/)
Eckel은 자바, Python, C++용 “thinking in” 시리즈를 저술했다. 그의 Thinking in Java는 개인적으로 내가 자바를 배울 때 많은 도움이 되었다. 자바 언어에서 객체를 어떻게 생각해야 하는지에 대한 통찰력을 심어주었다. 이 사이트에서 그의 모든 저서들을 무료로 다운로드 할 수 있다. 그가 쓴 많은 아티클들도 링크 되어 있다.
ONJava.com
ONJava.com(http://www.onjava.com/)
O’Reilley는 프로그래밍 언어와 툴 관련 저서들을 오랫동안 출판해왔다. 이들의 자바 관련 웹 사이트도 훌륭하다. 다양한 자바 툴(JDOM, Hibernate) 정보와 자바 플랫폼의 다양한 부분들(J2SE, J2EE)을 수록하고 있다. 또한 뛰어난 아티클과 튜토리얼도 갖고 있다. 이 사이트는 토픽별로 구분되어 있다. 몇몇 예제는 자바와 XML, Java Security, Wireless Java, Java SysAdmin으로 구성된다. 이 사이트는 O’Reilley 교육 랩으로 연결되어 온라인 강의를 들을 수 있다. 무료는 아니지만 기술도 배우고 보증서도 받을 수 있는 편리한 방법이다.
java.net
java.net Communities(http://community.java.net/)
이곳에는 여러 커뮤니티들이 있다. 또한 주제 포럼과 아티클도 있다. 예를 들어 Java Desktop 커뮤니티에는 데스크탑 용 자바 개발과 관련된 모든 종류를 다루고 있다. Java Patterns 커뮤니티는 자바 세계의 패턴 리소스 포탈로서 흥미를 끌고 있다. Java User Groups (JUGs)에서는 JUG의 생성, 실행에 관련된 정보를 찾을 수 있다.