[필독서] UML 실전에서는 이것만 쓴다.

[■프로그래밍 일반]
http://kangcom.com/common/bookinfo/book ··· 12170001


 
Robert Cecil Martin
정지호 , 이용원
Insight (인사이트)
20,000원16,000원 (20%↓)
480원 (3%)
8995300981 / 9788995300985
번역서 / 2004-01-02 / 380 쪽
도서특징
[전문가 서평]
또 UML 책인가?
이 책은 UML을 공부하려는 사람을 위한 책이 아니다. 이 책은 UML을 사용하려는 사람을 위한 책이다. 이 책의 철학에 그나마 가까운 UML 서적을 꼽는다면 마틴 파울러가 쓴 'UML Distilled' 정도를 꼽겠다. 하지만 그것마저도 가까운 것이지, 이토록 실용적이고 실전적이면서 최소주의(minimalism)적인 UML 서적은 본인이 아는 한 없다.

필자가 이 책의 초고를 처음 볼 때 ‘UML을 언제 사용하는가’라는 질문에 저자가 답한 것을 읽고는 뒷통수를 죽비로 얻어맞는 느낌을 받았다. ‘뭔가 꼭 테스트해야 할 것이 있고 그것을 테스트하는 데 코드로 하는 것보다 UML로 하는 것이 더 값싼 경우에 UML을 사용한다.’ 따악---!

실무에서 UML을 사용해본 사람은 이 책을 읽으면서 너무 즐거운 나머지 박수를 치고 발을 구르게 될지도 모르겠다. UML을 사용해보지 못한 사람은 무림비공을 거저 줏은 느낌을 받을 것 같다. 혹 주변의 질투와 시기의 눈초리를 받을지도 모르겠다. 군대 다녀온 사람이 별다른 이유 없이 면제된 사람을 보고 질투심을 느끼는 것처럼.

이 책은 사실 UML만 가르쳐주지는 않는다. XP와 객체 지향 설계의 원칙까지도 덤으로 알려준다. 사실 이런 부가 지식 없이는 UML을 효과적으로 사용하기 어렵다고 생각한다. 특히 뒷부분의 사례 연구를 통해 구체적인 사례에서 UML이 어떻게 사용되는지, 설계는 어떻게 하는지 등을 따라가다 보면 어느새 주변의 시기와 질투를 한 몸에 받는 자신을 발견하게 될 것이다.
- 김창준 (월간 마이크로소프트웨어 편집자문위원, 익스트림프로그래밍 컨설턴트)



[누구를 위한 책인가]
  • 현장에서 일하는 개발자
    프로젝트를 진행하려면 UML을 사용해야 하지만, UML은 너무 복잡하고 난해하다. UML 책을 한두 권 읽어서 이론은 잘 알지만, 실무에서 UML을 어떻게 활용하는지 감을 잡을 수 없다. 프로젝트에서 쓰는 것만 배울 수는 없을까? 현업 개발자에게 맞춰 실무에 쓰기 편하게 알아야 하는 개발자 관점에서 UML을 다루었다. UML을 활용하기 위한 방법론과 리팩토링까지 보여준다.

  • UML과 객체지향 설계를 동시에 배우고 싶은 독자
    실제 설계 예시를 단계별로 분석/설계/구현/검증까지 보여준다. 이 책에 코드가 많은 이유는 ‘평범하고 나쁜 설계’를 ‘좋은 객체지향 설계’로 발전시키는 과정을 빠짐없이 보여주기 때문이다.



    [이 책의 특징]
  • 다이어그램마다 대응하는 코드가 있다
    코드와 다이어그램이 매핑되어 다이어그램을 코드로 즉시 떠올릴 수 있게 소스코드 수준으로 설명해준다.

  • 실제 현장에서 도움이 되는 내용만 담았다
    다양한 프로젝트를 진행해본 저자의 경험에서 우러나온 글이라서, 실제로 프로젝트에 UML을 적용하기로 마음먹은 개발자가 첫 발을 내딛기에 좋다.

  • 꼭 필요하지 않으면 하지 마라
    저자가 누누이 “적게 쓰는 것이 좋은 것이다”를 강조하며 실제 프로젝트에서 그 다이어그램을 잘 쓰지 않는다면 되도록 적게 쓰라고 말한다.

  • 프로젝트 초심자에게 명쾌하게 정리해준다
    각종 다이어그램의 단점과 주의할 점을 딱 집어서 설명해서, UML을 사용하면서 느끼는 궁금증이나 불명확한 부분에 대해 권위 있는 사람이 단정적으로 정리를 해준다.

  • UML는 개발자를 더 편리하게 해주는 도구일 뿐이다
    UML은 단지 의사소통이나 대규모 프로그램의 로드맵이나 막바지 문서화에 쓰는 도구일 뿐이다. 우리의 목표는 제대로 객체지향적으로 개발하기를 원한다.

  • 실제 프로젝트에 쓸 수 있는 XP방법론을 간략하게 소개한다
    최근 관심을 불러일으키는 XP 방법론은 저자의 UML 관(觀)과 잘 들어맞는다. 간략하게 활용하는 예를 보여준다.

  • 실제로 분석/설계/구현/검증하는 예를 보여준다
    좋은 설계를 보면 누구나 어떻게 저런 생각을 해 냈을까하고 궁금하게 여기기 마련이지만 대개 좋은 설계의 예를 보여주고 끝날 뿐이다. 하지만 이 책은 평범하고 나쁜 설계에서 어떻게 좋은 설계로 발전시켜 가는지 중간 단계를 생략하지 않고 모두 보여준다.

  • 설계 초심자에게 선배가 조언해주는 가이드다
    프로젝트 관리와 설계에 눈을 떠가는 개발자가 현장에서 만나는 문제를 어떻게 풀어야 할지 선배 개발자가 명쾌하고 유머러스하게 조언해주는 책이다.



    [부/장별 내용 요약]
    1장 - 이 책의 개요
    정말 바쁜 사람이라면 1장에서 다룬 것만 읽어도 남이 그린 다이어그램을 읽거나 간단한 다이어그램을 그리는 데 문제가 없을 것이다.
    2장 - 다이어그램으로 작업하기
    UML는 문서화를 위해 쓰는 것이 아니다. 그러면 UML을 언제, 왜 사용해야 할까? UML이 단지 의사소통이나 대규모 프로그램의 로드맵을 만들거나 막바지 문서화에 쓰는 도구일 뿐이다. UML 지상주의에 빠지지 마라.
    3장 - 클래스 다이어그램
    UML 클래스 다이어그램의 기본개념과 세부사항을 제시하고, 코드와 다이어그램을 대응시키고 표기법의 핵심적인 내용을 정리한다. UML로 표기할 수 있는 것은 다양하지만, 대부분 UML을 너무 적게 쓰는 편이 너무 많이 사용하는 편보다 낫다.
    4장 - 시퀀스 다이어그램
    시퀀스 다이어그램은 반복과 조건, 비동기 메시지, 다중 쓰레드처럼 복잡한 상황에서 유용하다. 그러나 모든 메소드의 시퀀스 다이어그램을 그리려고 하지는 마라.
    5장 - 유스케이스
    유스케이스 개념을 명확히 하고, 기본 흐름과 대안 흐름을 어떻게 작성해야 할지 설명한다. 복잡한 유스케이스라는 암흑의 길로 발을 들여놓지 마라.
    6장 - OOD(객체지향 개발)의 원칙
    나쁜 설계 냄새가 날 때 단 하나의 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 교체 원칙(LSP), 의존 관계 역전 원칙(DIP), 인터페이스 격리 원칙(ISP) 등 다섯 가지 원칙을 어떻게 써야 할지 소개한다.
    7장 - 실천방법: dX
    익스트림 프로그래밍(XP)을 간략하게 설명해서, 개발 방법론이 아직 정립되지 않은 팀에서도 비교적 빨리 dX 개발 방법론에 익숙해질 수 있다.
    8장 - 패키지
    패키지 다이어그램 표기법을 설명한 다음, 소프트웨어 모듈을 패키지로 어떻게 나누어야 좋은지 릴리즈 재사용 등가 원칙(REP), 공통 폐쇄 원칙(CCP), 공통 재사용 원칙(CRP), 의존 관계 비순환 원칙(ADP), 안정된 의존 관계 원칙(SDP) 등 다섯 가지 원칙을 통해 설명한다.
    9장 - 객체 다이어그램
    간단한 소켓 서비스 프레임워크를 예로 들어 객체 다이어그램이 유용한 경우를 설명한다. 하지만 클래스 다이어그램에서 바로 유추해내기 힘든 경우를 제외하고는 큰 쓸모가 없다.
    10장 - 상태 다이어그램
    많은 개발자들이 간과하지만 사실은 매우 유용한 유한 상태 기계(FSM)를 소개하고, FSM을 상태 다이어그램으로 어떻게 표기하는지 설명한다. 덤으로 저자가 직접 만든 상태 기계 컴파일러를 사용해 직관적인 문법을 사용하는 작은 언어로부터 FSM을 소스 코드로 생성하는 방법도 설명한다.
    11장 - 휴리스틱과 커피
    실제로 커피 메이커를 객체 지향으로 설계하면서 초보자가 빠지기 쉬운 실수들을 지적하고 어떻게 더 나은 설계로 개선하는지 단계별로 설명한다. 고차원 정책과 세부사항을 격리하고 행위 중심으로 설계하며 허깨비 클래스, 하나님 클래스 등을 조심하라.
    12장 - SMC 원격 서비스: 사례 연구
    여태까지 설명한 UML 다이어그램을 전부 사용해서 실무 수준의 복잡한 애플리케이션을 설명한다. 10장에서 설명한 상태 기계 컴파일러를 원격으로 호출하여 사용하게 해주는 서버와 클라이언트를 사례 연구로 제시한다. 애플리케이션의 모든 부분을 빠짐없이 UML 다이어그램으로 그린 다음, 그에 대응하는 모든 코드를 보여주므로 실제로 큰 규모의 프로그램 개발에서 UML이 어떻게 쓰이는지 또렷이 알 수 있다.



    [추천 서평]

    과연 이 다이어그램이 코드랑 무슨 상관인가?이 책을 리뷰하면서 옛 생각이 머릿속을 스쳐 지나갔습니다. “과연 이 다이어그램이 코드랑 무슨 상관인가?” 이 질문은 UML 처음으로 접한 사람들이 대부분 제일 처음으로 하는 질문입니다. 저 역시 4년 전에 UML을 처음 만나고 나서 했던 질문이기도 합니다. 그 당시에는 코드와 다이어그램간의 구체적인 상관관계를 속시원하게 털어놓는 책이 없었습니다. UML Distilled와 같은 명저가 있었지만 그 당시 객체지향 분석설계에 제가 거의 경험이 없는데다가 그 책 자체가 코드와 다이어그램을 매핑하지 않으려고 하는 경향이 강했습니다.
    4년 전에 그토록 갈구했던 답이 이 책 속에 있었습니다. 그것도 아주 구체적으로. 물론 UML 자체의 특성상 코드와 다이어그램의 관계가 1:1 매핑된 것이 아니기 때문에, 완벽한 답이 아닙니다.(완벽한 답이란 존재할 수 없죠.^^) 단지 이 다이어그램으로 코드를 어떻게 나올까하는 ‘감’을 잡을 수 있습니다. 그러나 이 책이 그런 감만 잡게 해줬다면 평범한(?) UML 서적으로 묻혔을지 모릅니다. 객체지향 분석 설계하면서 생기는 UML 사용 노하우가 녹아 있지요. 뭔가 또 부족한가요? 네, 맞습니다. UML을 배우면 자연스레 다가가는 객체지향 분석 설계의 원칙도 다루고 있죠. 더 나아가 최근 뜨는 XP(eXtreme Programming)의 핵심도 다룹니다. 이 얇은 책에 이런 게 어떻게 다 있냐구요? 한번 확인해보길 바랍니다. 정말 다 있습니다.
    마지막으로 다음같이 생각이 드는 분에게는 이 책을 적극 권하겠습니다.
    “다이어그램이랑 코드랑 대체 무슨 상관인 거야!” “UML 책 한 권 보고 남는 게 없어.”
    “UML 표기법 다 외워야 하는 건가?” “객체지향 분석 설계를 맛보고 싶어.” “뭐 이리 다이어그램이 많아!” “뭘 어떻게 써야 하지?” “도통 감이 안 잡혀.”
    - 미리 읽어 본 독자 서현호(objectworld.org)

    C++ 프로그래머도 이 책을 한 번 봐야 한다.
    저자가 이 책을 자바 프로그래머들에게 UML을 가르치려는 책이라고 하는 것은 나도 잘 안다. 논리적으로 자바에 맞게 구성해놓았고 많은 예제들도 다 자바로 되어 있으니 확실하다. 하지만 좋은 UML 책을 찾는 C++ 프로그래머들에게도 이 책이 도움이 될 지도 모르겠다. 자바 예제들이 자바 언어의 복잡한 점을 모두 사용하지는 않으니까. 그럴 필요도 없다. 그러니까 자바를 잘 모른다고 해도 그냥 눈으로 코드를 읽기만 해도 무슨 뜻인지 알 수 있을 것이다. 머릿속으로 그냥 C++로 다시 작성해 볼 수도 있겠다.
    그리고 자바가 C++보다 객체 지향적으로 더 순수하긴 해도, 문법이 C++만큼 강력하진 않지 않은가. 다중 상속도 없고, 템플릿이나 연산자 오버로딩도 없고. 이런 의미에서 C++를 자바의 상위 집합으로 생각해도 괜찮겠다. 그러니까 이 책의 자바 예제를 정면으로 보지 말고 눈을 가늘게 뜨고 보면 그냥 C++로 보인다! 너무 비유가 지나치다고 생각할지도 모르지만, 경험이 많은 C++ 프로그래머에게는 비유가 아니라 사실이다.
    - 아마존서평(Wes Boudville)

    뛰어난 교육 도구
    많은 UML 책과 달리 이 책은 글도 잘 썼고 재미도 있을 뿐 아니라, UML의 기본을 가르쳐주는 데 그치지 않고 독자를 더 훌륭한 프로그래머로 만들어준다. 이 책은 대다수의 UML 책처럼 UML의 모든 것을 피상적으로 다루지 않고, 모델링을 언제, 어떻게, 왜 사용하는지 설명한다. 그리고 이보다 더 중요한 내용인, 언제 사용하지 *말아야* 하는지도 설명한다. 저자는 모델이란 코드를 더 쉽게 이해하기 위한 설명일 뿐이고, 그런 역할을 하지 않는 모델은 쓸모없다고 생각한다.
    이 책에서 UML의 모든 주제를 다루지는 않지만, 중요한 내용들을 적절한 수준에서 다룬다. 특히 저자가 나쁜 코드를 찾아내는 데 모델을 사용할 수 있다는 점을 보여주고, 기본적인 OOAD 원칙들도 몇 가지 논의하는 점이 마음에 든다. 내가 일하는 곳이 XP 기반은 아니지만, 저자는 설계에 대해서 약간 수정한 XP 접근 방법을 옹호한다. 그러나 저자의 접근 방법에는 XP와 무관한 좋은 내용도 많이 들어있다.
    나는 이 책을 두고두고 참고할 수 있도록 결코 내 책상에서 먼 곳에 두지 않을 것이다.
    - 아마존서평

  • 저자소개
    로버트 C. 마틴(Robert C. Martin)
    객체 지향 설계, 패턴, UML, 애자일 방법론(agile methodology)과 익스트림 프로그래밍(eXtreme programming) 컨설팅 분야에서 선두를 달리는 오브젝트 멘터사(Object Mentor Inc.)의 대표다.
    2002년 "Agile Software development: Principles, Patterns, and Practices(Prentice Hall)"으로 졸트상(JOLT Winner)을 수상했고, 베스트셀러 "Designing Object-Oriented C++ Applications Using the Booch Method(Prentice Hall)"를 저술했다. "Pattern Languages of Program Design 3(Addison-Wesley)"과 "More C++ Gems"를 편집했으며, 제임스 뉴커크(James Newkirk)와 "XP inPractice(Addison-Wesley)"를 공동 저술했다.
    또 국제적인 개발자 이벤트에서 유명한 강연자이기도 하며, 4년간 C++ 리포트(C++ Report)의 편집자이기도 했다.



    [역자 소개]
    이용원
    중앙대학교 컴퓨터공학과에서 소프트웨어공학을 전공했으며, (주)소프트웨어크래프트 책임 컨설턴트, JStorm 자문으로 있다. 삼성생명 CM 지원 시스템에 프로젝트 매니저로 참여하고, 삼성생명 인터넷 몰 표준화와 동부건설 ERP 시스템, 삼성생명 CBD기반 자산 관리 시스템 개발, 조흥은행 국외점포 표준 전산 시스템에 아키텍트로 참여했다.
    "엔터프라이즈 자바빈즈(대청)"와 "J2EE 응용과 디자인 패턴(대청)"을 썼고, "EJB 디자인 패턴(인사이트)","J2EE Design Patterns(정보문화사)", "Thinking in Java(대웅미디어)"를 번역했다.

    정지호
    서울대학교 재학 중이며 현재 (주)언어과학에서 주임 연구원으로 있다. 한국어 Text To Speech 서버의 통신 하위 시스템, 유아용 한글 학습 게임 ‘디디미’, 영어 교육 솔루션인 ‘Dr. Listening’ 등 다양한 프로젝트에 참여했다. 파이썬, 펄, 루비 같은 동적 프로그래밍 언어들에 관심이 많아서 큰 규모의 시스템에 통합하는 일이나 UML을 동적 언어에 적용시킬 방법에도 관심이 많다.
    크리에이티브 커먼즈 라이센스
    Creative Commons License

    이 글의 트랙백 주소 :: http://munduki.tomeii.com/darkhorse/trackback/214

    ::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::