IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
한국 developerWorks   >  dW Column  > developerworks
개발자 책꽂이

가을 맞이 책 2선: 자바 프로그래밍 구현 패턴과 코드 정리 관련 서적



박재호박재호 jrogue@gmail.com

블로그 '컴퓨터 vs. 책'과 '프로젝트 관리'를 운영하고 있으며, "조엘 온 소프트웨어"를 비롯한 IT 전문서적 번역가로 활동 중이다.



2009년 09월 29일


프로그램 작성에서 설계가 매우 중요하다는 사실은 삼척동자라도 다 아는 사실이다. 하지만 설계가 아무리 좋아도 구현이 엉망이면 결국 제품도 엉망이 된다. C라면 지난번‘고전 탐험 1탄, C 프로그래밍 서적 2선’에 소개한 프로그래밍 서적만으로 개발에 필요한 지혜를 얻기에 충분하지만 C++나 자바처럼 상대적으로 복잡한 프로그래밍 언어라면 단순 프로그래밍 문법과 활용법을 넘어서 고급 서적이 필요하기 마련이다. 이에 가을을 맞이하여 자바 프로그래머를 위한 구현 관련 고급 서적 두 권을 소개하겠다.


1번 타자

켄트 벡의 구현 패턴 켄트 벡의 구현 패턴
켄트 벡 지음, 전동환 옮김, 에이콘출판 2008년 출간

설계 패턴을 다루는 서적은 많이 나왔지만 구현 패턴을 본격적으로 다루는 책은 찾기가 쉽지 않다. 설계와 비교해 구현은 추상화 수준이 낮아 패턴을 끄집어내기 어렵기 때문이다. 하지만 XP와 TDD를 창시한 켄트 벡은 구현에서 패턴을 찾아내려는 용감한 모험에 나선다. 그리고 그 결과를 ‘구현 패턴’이라는 얇은 책으로 정리했다. 책이 얇으니 내용이 쉬울 것이라 생각하면 안 된다. 책 뒤표지에 적힌 ‘이 책에서 다루는 내용’을 잠깐 살펴보자.

  • 소개: 코드를 통한 커뮤니케이션의 가치와 패턴에 깔려 있는 철학
  • 클래스: 언제 어떻게 클래스를 생성해야 하는가, 클래스는 어떻게 로직을 담아야 하는가
  • 상태: 상태를 저장하고 얻어오는 최선의 기법
  • 행위: 로직, 특히 대안 경로를 표현하는 행위에 관한 패턴
  • 메서드: 어떻게 작성하고 이름 짓고 나눠야 하는가
  • 컬렉션: 컬렉션의 선택과 사용
  • 발전하는 프레임워크: 프레임워크를 작성할 때 필요한 구현 패턴의 변형

아마 ‘코드’ 패턴이라는 책 제목을 처음 읽고서 떠올린 생각과는 다른 내용이 나와 놀랐을지도 모르겠다. 이 책은 단순한 코딩 기법이 아니라 프로그래밍 언어 구성 요소 이면에 숨은 철학과 이런 철학을 토대로 상황에 맞춰 사용할 구성 요소를 결정하는 방법을 설명한다.

프로그래밍 언어 구성 요소에 숨겨진 철학과 구성 요소 결정 방법이 중요한 이유는 무엇일까? 로버트 L. 글래스가 강조했듯이 유지 보수 문제 때문이다. 프로그램은 생명이 있는 유기체와 같아서 끊임없이 성장하며 커나가는데, 처음에 작업을 시작한 개발자와 나중에 작업을 이어받은 개발자가 반드시 같으리라는 보장이 없다. 따라서 나중을 위해 내가 만든 코드를 남이 어떻게 생각할지 어느 정도 감을 잡고 있어야 한다. 어떤 경우에는 남이 아니라 스스로에게 도움이 되기도 한다.

켄트 벡은 서문에서 커뮤니케이션을 강화하는 수단으로 코드의 중요성을 강조한다. 다음에 제시한 3단계가 가장 기본적인 마음가짐이다.

  1. 본능에 의한 코딩을 멈추고 내가 어떤 생각을 하는지 되돌아보는 여유를 가지자.
  2. 다른 사람들을 배려하자. 즉 커뮤니케이션이 가능한 코드를 만들자.
  3. 다른 사람의 존재도 내 존재만큼이나 중요하다. 나 자신만의 코드가 아닌 다른 사람들을 위한 코드, 즉 우리의 코드를 만들자.

켄트 벡은 짧은 글, 그림, 일화, 예시를 총동원해 우리가 지금까지 어렴풋이 알던 여러 가지 프로그래밍 패턴을 77가지로 정리한다. 완벽한 코드를 제시하는 대신에 상황에 맞춰 작은 코드 조각을 보이기 때문에 불만스러울지도 모르겠지만, 실제 구현에 응용하는 책임은 각자 몫이므로 주의 깊게 패턴을 살펴서 필요할 때 활용하면 되겠다.

이 책을 읽고 나서 자신의 의도가 명백하게 드러나며 읽기 쉬운 코드를 작성함으로써 다른 개발자와 커뮤니케이션을 원활하게 만들어보자. 개발자로서 동료 개발자와 더불어 튼튼한 신뢰를 쌓는 멋진 출발점이라고 생각한다.



위로


2번 타자

Clean Code: A Handbook of Agile Software Craftsmanship Clean Code: A Handbook of Agile Software Craftsmanship
Robert C. Martin 지음, Prentice Hall PTR 2008년 출간

개발자로서 지난 십여 년간을 뒤돌아보면 코드를 쓰는 시간보다는 남의 코드를 읽는 시간이 확실히 많았다. 요구 사항 문서, 아키텍처 문서, 설계 문서를 읽는 시간도 있었지만, 코드를 읽는 시간과는 감히 비교하지 못하겠다. 코드야말로 기계가 실행할 정도로 상세한 요구 사항을 기록한 문서가 아닌가? 이 책은 이렇게 중요한 코드에 대한 책이다. 실제 사례를 들어, 코드의 좋고 나쁜 점을 이리저리 파고들고 깨끗한 코드를 작성하는 방법을 쉬지 않고 설명한다. 역시 이 책 뒤 표지에 적힌 ‘이 책에서 다루는 내용’을 잠깐 살펴보자.

  • 좋은 코드와 나쁜 코드를 구분하는 방법
  • 좋은 코드를 작성하고 나쁜 코드를 좋은 코드로 바꾸는 방법
  • 좋은 이름, 좋은 함수, 좋은 객체, 좋은 클래스를 만드는 방법
  • 가독성을 최고로 높이기 위한 코드 작성 방법
  • 코드 논리를 엉망으로 만들지 않고서 완벽한 오류 처리를 구현하는 방법
  • 테스트 주도 개발을 위해 단위 테스트를 작성하는 방법

‘구현 패턴’과는 달리 ‘깨끗한’ 코드라는 제목을 보고 어렴풋이 느낀 내용이 그대로 들어앉아 있을 것이다. 하지만 ‘구현 패턴’과는 또 다른 이유에서 이 책 내용은 그렇게 편안하지 않다. 이 책을 보면 자신이 작성했던 옛날 코드를 자꾸 되돌아보게 되기 때문이다. 좋은 기억만 떠오르면 천만다행이지만, 유감스럽게도 나쁜 기억만 떠오를 가능성이 높다. 켄트 벡이 언급했듯이 ‘본능적’으로 작성한 프로그램은 ‘깨끗하고’ ‘좋은’ 코드가 아니라 ‘어지럽고’ ‘나쁜’ 코드가 될 가능성이 훨씬 더 높으며, 일반적으로 우리는 늘 초읽기에 몰린 바둑 국수처럼 코드를 미친 듯이 ‘본능적’으로 쏟아내기 때문이다. 이 책을 이런 나쁜 버릇을 고치기 위한 좋은 지침서라고 보면 틀림없겠다.

이 책은 깨끗한 코드가 무엇인지에 대한 소개를 시작으로 의미 있는 이름, 함수, 주석, 형식 맞추기, 객체와 자료 구조, 오류 처리, 경계, 단위 테스트, 클래스, 시스템, 창발성(創發性), 동시성, 연속적인 개선, JUnit 들여다보기, SerialDate 리팩터링이라는 주제를 놓고 오브젝트 멘토 진영에서 겪은 경험과 고민을 제대로 풀어낸다. 주로 추상적인 예를 드는 ‘구현 패턴’과는 달리 실전에서 사용 중인 오픈 소스 코드를 대상으로 깨끗한 코드로 세탁하기 위해 리펙터링하는 과정을 단계별로 밟는 예를 곳곳에서 제시하고, 이것도 부족해 마지막 장에 ‘냄새와 발견법’이라는 주제로 본문에서 사용한 규칙을 총정리하므로 뭔가 구체적인 내용을 원하는 독자라면 쌍수를 들고 환영할 것이다.

로버트 C. 마틴은 책 전반에 걸쳐 다음과 같은 보이 스카우트 규칙을 강조하고 있다.

캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.

체크아웃할 때보다 좀 더 깨끗한 코드를 체크인함으로써 개학을 앞두고 몰아서 방학 숙제를 해치우는 대신 하루에 한 장씩 일기를 쓰듯 코드를 정리하라는 말이다. 변수 이름을 제대로 바꾸고, 함수를 분할하고, 복잡한 논리를 단순하게 만들다 보면 어느 순간 깨끗하고 좋은 코드가 된다는 원칙은 이 얼마나 강력하면서도 호소력이 짙은가? 이 책 1장 가장 마지막에 나오는 글로 마무리하겠다.

공연장으로 가다가 길을 잃은 콘서트 바이올린 연주자 우스개소리를 기억하는가? 그는 길거리에서 한 노인에게 카네기 홀로 가는 방법을 물었다. 노인은 연주자와 그가 든 바이올린을 보고 이렇게 말했다. “연습해, 연습!”

이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us
[지난 developerWorks Column 보기]



위로


사이트 여행

dW 커뮤니티
포럼 | 블로그 | Spaces
dW Student Community

로컬 컨텐츠

행사 및 세미나

기획 기사

개발자 입문

튜토리얼 및 교육

TOP 10 인기자료

SW 다운로드

RSS 피드

뉴스레터
 
  
자바스크립트가 작동이 중지되었습니다. 이 기능을 수행하시려면 브라우저에서 자바스크립스트를 작동시켜 주시거나 이곳을 클릭해주세요.

Special offers
Screencast
IBM SOA Sandbox 시험판
dW Student Community
로보코드
코드 트레이닝


    IBM 소개 개인정보 보호정책 문의