메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

『IT EXPERT, 자바 디자인 패턴과 리팩토링』의 저자 박지훈님이 말하는 디자인 패턴과 리팩토링

한빛미디어

|

2003-01-27

|

by HANBIT

11,725

저자: 『IT EXPERT, 자바 디자인 패턴과 리팩토링』의 저자 박지훈 (outinsider@orgio.net)

집필동기

세상이 변했다. 95년 GoF의 『Design Pattern』이 출간된 이후 뜻있는 국내 개발자들이 이 책을 번역 출간하려 했으나 대부분의 출판사들은 미심적은 시장성 때문에 머뭇거리고 있었다. 그런데 지금 서점에 나가보면 디자인 패턴의 전성시대다. 7년이 지난 후에야 GoF의 『Design Pattern』이 번역되었지만 디자인 패턴과 관련된 서적들은 지금 서점의 좋은 곳을 차지하고 있다. 현재 디자인 패턴 관련 서적은 국내개발자의 필수 구입 목록 안에 꼭 포함된다. 거기다가 마틴 파울러(Martin Fowler)의 『Refactoring』도 많은 개발자들의 열광적인 호응을 이끌어내고 있다. 이런 현상은 국내 개발자들의 관심이 "일단 구현"에서 "품질 구현"으로 이동하고 있음을 나타낸다. 자연스러운 결과이다. 점점 성숙해져가는 국내 소프트웨어 산업과 최신 정보의 습득을 용이하게 해주는 인터넷의 도입으로 개발자들은 품질에 관심을 갖게 되었다.


[그림 1] 디자인 패턴과 리팩토링

GoF의 『디자인 패턴』, 마틴 파울러의 『리팩토링』이란 바이블 서적이 이미 출간되고 번역되었음에도 불구하고 필자가 이와 관련된 책을 쓰게 된 건 다음과 같은 몇 가지 이유에서다. 첫째, 그 책들의 내용을 제대로 이해하기 위해 필수적인 객체지향 기본 원리에 대한 설명이 부족하다. 따라서 그런 사전지식이 없는 개발자들은 그 책들을 읽고 제대로 이해하기 어렵다. 둘째, 디자인 패턴과 리팩토링을 독립적으로 설명하는 책들은 많지만 [그림 1]과 같이 그 둘을 통합하여 상호보완적인 면을 설명한 책은 없다. 그 둘의 장단점을 비교하여 양면을 잘 파악하고 있는 개발자는 한 가지씩만 독립적으로 알고 있는 개발자보다 이를 더 잘 사용할 것이다. 셋째, 앞에서 언급한 책들은 다소 딱딱하고 이론적인 방식으로 기술되었다. 또한 백과사전처럼 지식의 "레퍼런스(reference)"용으로 작성되었다. 만약 그 책들이 재미있고 실용적인 방식으로 기술되었다면 초보자들도 내용을 쉽게 이해할 수 있었을 것이다. 그리고 마지막으로는 자바 언어로 설명된 만족스러운 디자인 패턴 책이 없기 때문이다.

따라서 필자는 GoF와 마틴 파울러의 두 책을 초보자라도 충분히 감당할 수 있도록 안내하는 성격의 책이 필요하다고 판단하였다. 그 결실이 바로 이 책 『IT EXPERT, 자바 디자인 패턴과 리팩토링』이다. 본 책은 초, 중급 자바 개발자들도 디자인 패턴과 리팩토링을 쉽게 이해할 수 있도록 필요한 사전 지식들을 대폭 설명하였으며 많은 예제와 삽화를 삽입하여 핵심적인 내용을 쉽게 설명하려 노력하였다.

[그림 2]는 필자가 책 속에 포함시킨 삽화 중의 하나이다. 이 그림은 소프트웨어 개발자에게 디자인 패턴이 도입된 기원을 잘 설명하고 있다. (더 자세한 설명은 책을 참고하기 바란다.)


[그림 2] 디자인 패턴의 유래

소프트웨어 개발자는 "튼튼한" 소프트웨어를 만들어야 한다. 여기서 "튼튼함"은 어떤 충격에도 견디는 "딱딱함"만을 의미하지는 않는다. 하드웨어와 달리 소프트웨어는 오래 살아남기 위해서 그 특성상 외부의 변화를 쉽게 받아들일 수 있는 "유연함"이 오히려 더 중요하다. 이 "유연함"을 제대로 구현하지 못했을 경우 개발자는 개발 이후에 오는 심각한 후유증을 감내해야 할 것이다.

바로 이런 개발자들에게 디자인패턴과 리팩토링은 복음이다. 전문가의 객체지향 설계 솔루션을 패턴화한 디자인 패턴과 단계적인 코드 개선의 방법들을 체계화한 리팩토링은 현재 객체지향 개발자들이 놓쳐서는 안될 귀중한 자산이 되어버렸다. 디자인패턴과 리팩토링은 서로 상관없는 독자적인 영역에 속해 있지 않다. 그 둘은 서로를 치켜 올려준다. 필자는 개발자들이 그들을 따로 공부하는 것보다 더 쉽게 객체지향 소프트웨어의 "유연함"을 구현하는 원리와 방법을 학습할 수 있도록 그 둘을 통합적으로 설명하는 책을 집필하고 싶었다. 그래서 인터넷과 객체지향 관련서에 분산되어 있는 수많은 객체지향 설계 노하우와 정보들을 체계화한 책을 집필하게 된 것이다.

책의 내용

본 책은 일반 IT 서적이 아니다. 기존의 책들이 해당 저자가 자신의 관점에서 특정 기술의 내용을 직접 설명하는 경우가 대부분이었다면, 본 책은 다른 명저의 내용을 필자가 이해한 후, 그것을 보다 쉽고 체계적으로 재구성했다는 점에서 기존 IT 서적과 다르다고 볼 수 있다. 본 책은 GoF의 『디자인 패턴』과 마틴 파울러의 『리팩토링』이란 책을 기반으로 그들이 지향하는 내용, 즉 "변화(Change)를 쉽게 수용할 수 있는 유연(Flexible)한 소프트웨어를 설계(Design)하는 방식(Method)"을 통합적으로 설명하려고 하였다.


IT EXPERT, 자바 디자인 패턴과 리팩토링

참고 도서

IT EXPERT, 자바 디자인 패턴과 리팩토링
박지훈




본 책의 내용은 다음과 같다.
1) 객체지향 설계의 기본원리들
소프트웨어 공학에서 제시하는 좋은 객체지향 설계의 원리들을 독자들이 이해하기 쉽도록 단계적이며 다양한 그림과 예제로 설명하였다. 또한 UML(Unified Modelling Language)을 유연하고 확장성이 높은 소프트웨어의 내부 구조를 스케치하고 확인하며 다른 개발자와 토론할 때 쓰이는 도구로서 설명하였다.
2) 자바의 객체지향 특징 비교, 분석
자바의 객체지향과 관련된 문법을 밑바닥부터 설명한다. 클래스(class)와 상속(inheritance), 인터페이스(interface)와 구현(implementation)의 문법적 의미만 언급하는 것이 아니라 각 요소를 활용하여 좀 더 객체지향적인 소프트웨어를 만드는 방법을 소개한다.
3) 디자인패턴(Design Pattern)
GoF의 『디자인패턴』의 내용 중 핵심적인 부분만을 발췌하여 설명한다. 미래의 변화를 예상하여 개발 초기에 그것을 손쉽게 받아들일 수 있는 형태로 소프트웨어의 구조를 결정하는 원리를 소개한다.
4) 리팩토링(Refactoring)
마틴 파울러의 『리팩토링』의 내용 중 핵심적인 부분들을 필자가 고안한 분류와 형식에 맞게 설명한다. 코딩을 하면서 단계적이며 점진적으로 유연한 소프트웨어를 구현하는 방법을 소개한다.
5) 부록
짝 프로그래밍(Pair Programming)을 통해 책의 내용을 학습할 수 있는 방법을 설명하였다. 이 책만의 특징이다. 파트너와 한 컴퓨터 앞에 나란히 앉아서 공동으로 책 속의 예제를 프로그래밍하면 재미있기도 하거니와 학습효과도 배가 된다.
또한 필자는 어려운 내용들을 재미있고 효과적으로 설명하기 위해 다음과 같은 설명 방식을 채택하였다.
  • 다양한 삽화: 독자들이 따분하지 않도록 아래 [그림 3]과 같은 전문 일러스트레이터의 삽화를 필자와 협의하여 집어 넣었다. 예를 들어 Abstract Factory 디자인 패턴은 자판기의 버튼을 눌러 물건을 받는 것과 같다.

  • [그림 3] Abstract Factory 패턴

  • 예제 프로그램 위주: 대부분의 예제를 실제로 동작하는 간단한 프로그램으로 만들었다. 실제로 독자들이 프로그램을 타이핑하고 실행하면서 공부할 수 있다.
  • 디자인 패턴과 리팩토링의 효과 강조: 디자인 패턴과 리팩토링을 적용하기 이전 코드와 이후 코드를 상호 비교하여 그 효과를 확실히 알도록 구성하였다. 같은 기능의 두개의 코드를 만들고 그들의 상호 장단점을 비교하였다.
본 책이 설명하지 않는 내용

제목만 보면 디자인 패턴과 리팩토링의 모든 내용이 다 설명된 것처럼 보일 수 있다. 하지만 다음과 같은 내용은 생략되었다.
1) GoF의 디자인패턴과 마틴파울러의 리팩토링 책의 모든 카탈로그의 내용들
『디자인패턴』과 『리팩토링』의 모든 내용이 설명된 것은 아니다. 각각의 내용 중 핵심적이고 자주 사용되는 부분을 인용하여 유연한 소프트웨어를 만드는 과정을 설명한다.
2) UML의 자세한 내용
본 책은 객체지향 설계를 시각적으로 표현하는 용도로서 UML을 사용할 뿐이다. 따라서 책의 내용을 이해하는데 필요한 최소한의 내용만 설명하였다.
3) 자바의 상세한 문법
자바의 문법 중 객체지향 관련 부분만 설명하였다. 자세한 문법은 이미 독자들이 알고 있다고 가정하였다.
예상 독자층

본 책은 주로 다음과 같은 독자들을 염두에 두고 쓰여졌다.
  • 좋은 객체지향 설계에 관심있는 초,중급 자바 개발자: "일단 테크니컬하게 프로그램을 만들고 보자."에서 "어떻게 해야 오랫동안 유지하기 쉬운 소프트웨어를 만들 수 있을까?"에 관심이 많은 개발자
  • 디자인패턴과 리팩토링이 무엇인지 알고 싶은 개발자: 각종 IT잡지나 서적에서 이슈화되고 있는 디자인패턴과 리팩토링의 실체를 실제 소스코드를 작성하면서 알고 싶은 개발자
  • 이미 디자인패턴과 리팩토링을 공부했으나 좌절한 개발자: 디자인패턴과 리팩토링의 한서나 원서를 던져버리고 방황하는 개발자
  • 디자인 패턴과 리팩토링을 공부하여 이해했으나 예제 중심으로 요약 정리를 하고 싶은 개발자: 코드를 만져보면서 그들을 이해하고 싶은 개발자
사전 지식

본 책을 이해하기 위한 최소한의 지식은 다음과 같다.
  • 자바언어 문법 기초: 본 책은 모든 예제가 자바 언어로 제시되었다. 따라서 예제를 이해하기 위해서는 기본적으로 자바언어의 기초문법을 알고 있어야 한다.
  • 자바언어 개발환경: 예제를 실행시키기 위해 자바 개발환경(J2SE SDK)의 사용법을 알고 있어야 한다.
본 책의 아버지, 어머니

아버지 어머니 독자들이 필자의 책을 읽고 이 책의 아버지, 어머니 책을 보고 싶은 욕구가 생겼다면 필자의 의도는 성공한 것이다. 본 책은 젖과 꿀이 흐르는 기름진 땅으로 인도하는 지팡이와 같다. 아니! 그러기를 희망한다.

집필 후기

책을 쓰는 일은 용기가 필요하다. 마치 블록버스터 영화를 감독하는 것과 같다. 집필자나 감독이나 그 저작물이 공개되는 순간 대중들 앞에 발가벗겨진다. 거기다 관람료 7,000원의 4배가 넘을 이 책을 구입한 독자들의 마음자세를 생각하면 어찌 겁이 나지 않겠는가? 그래도 겁쟁이인 필자가 몇 권의 책을 집필했던 것은 아마 지나치게 낙천적인 성격 때문이거나 조그만 사명감 때문일 것이다.

부디 이 책을 읽은 독자들이 디자인 패턴과 리팩토링의 참맛을 혀끝으로 조금이라도 느꼈으면 한다. 음식맛이 좋은 레스토랑을 발견하면 그 집에 자주 가게되는 것처럼 독자여러분도 디자인 패턴과 리팩토링이란 맛있는 레스토랑을 발견했기를 바란다.
TAG :
댓글 입력
자료실