Kent beck의 "구현 패턴"을 읽고

작년 JCO의 에이콘 부쓰에서 막 번역되어 나온 것을 샀습니다. 재작년, 회사 후배가 Kent beck이 Smalltalk Best Practice Patterns의 자바 버전을 출판했다는 얘기를 해 주어서 내용이 무척 궁금했는데 번역본이 나온다는 소식을 (제 정보력 부족으로) 못 접하고 있다가 매대에 있는 것을 보고 어찌나 반갑던지요. 에이콘과 번역자 전동환님에게 감사할 뿐이죠. 솔직히 작년 JCO에 대해 이렇다 저렇다 말이 많았지만 저는 Toby님의 Spring-dm 세션을 들을 수 있었던 것과 이 책을 산 것으로 충분히 의미 있었습니다. ㅎㅎ

어떤 책?

우선, 이 책은 코드를 통한 커뮤니케이션에 대한 책입니다. 저자 머리말의 마지막 문장이 책의 저작 의도를 잘 설명합니다.

Code for others as well as myself and my buddy the CPU. (원서)
자기 자신과 CPU뿐 아니라, 자신의 코드를 보고 사용할 다른 사람들을 배려해서 코딩해야 한다. (번역서)

래퍼백곰님의 스스로 만족할 수 있는 일하기에 소개되기도 했던 이 문구는 프로그래머로써 자기 삶을 진지하게 살고자하는 켄트 벡의 결론이며 이 책을 한마디로 요약한 것입니다.

또한, 기술적인 측면에서 이 책은 개발 도구인 자바라는 언어의 사용 스타일을 (패턴의 형태로) 다루는 책이기도 합니다. 책 표지의 공구가 나열된 사진이 이를 시각화해서 표현 합니다. 자바는 다양한 가능성을 제공하지만 어떤 상황에 어떻게 사용해야 하는지 알려주는 책은 많지 않습니다.

제가 처음 자바를 공부하고 - 당시 어떤 언어로도 며칠만 공부하면 프로그래밍 할 수 있다는 자만심에 빠져 있었던 저인데 - 어떻게 다룰지 몰라 막막했을 때가 생각나더군요. 저는 다행히 자바 API 소스를 분석하면서 자바 다루는 법을 조금 익혔지만 그때 이 책을 봤다면 무척 도움이 되었을 것으로 생각이 되었습니다. 그렇다고 이 책이 초보자용이라는 뜻은 아닙니다. 비록 처음 자바를 공부하는 사람이 이 책을 읽으면 자바를 더 잘 사용할 수 있지만 이미 익숙한 사람도 코딩 중 부지불식간에 행하는 여러 행위를 적절히 필요에 맞게 선택해서 더 (유지보수하기) 좋은 코드를 만들 수 있도록 해줍니다.

구성

책은 크게 구현 패턴의 철학적인 면을 설명하는 부분과 패턴 자체를 설명하는 부분으로 나뉩니다.
저자는 이 책의 기술적인 부분에 관심이 있는 사람은 패턴 부분을 먼저 보라고 말하지만 제가 보기에 이 책의 정수는 앞부분에 있습니다. 솔직하게 말해서 전 저자 서문이 가장 좋더군요. ^^




가치와 원칙

가치와 원칙은 코딩 중 어떤 선택을 할 때에 기준이 되는 동력을 말합니다.
가치는 가장 일반적인 것으로 모든 프로그래밍에 적용되며 켄트 벡은 커뮤니케이션, 단순성, 유연성 세 가지를 제시합니다.
  • 커뮤니케이션 - 다른 개발자가 이해하고, 수정하고, 사용하기 쉽게 코딩한다.
  • 단순성 - 필요 없는 복잡성을 제거한다.
  • 유연성 - 커뮤니케이션과 단순성을 우선시하면서 프로그램이 발전하는 방향으로 유연성을 제한적으로 적용하라.
원칙은 가치보다는 덜 일반적이며 더 실천적인 것입니다. 여러 패턴 중 어떤 패턴을 사용해야할지 선택할 때에 도움을 줍니다.
  • 지역적 변화 - 수정할 때 변경되는 영역을 최소화
  • 최소 중복 - 중복은 코드 수정 비용을 높이는 위험 요소
  • 로직과 데이터의 결합 - 로직과 데이터를 함께 유지한다.
  • 대칭성 - 하나의 아이디어를 프로그램 전체에서 일관된 방식으로 표현하는 통일성
  • 선언적 표현 - 프로그램 흐름과 상관 없는 일반 구문을 선언적으로 표현
  • 변화율 - 함께 변경되는 로직이나 데이터를 분리해서 함께 관리
패턴

패턴 부분은 5부분으로 되어 있습니다. 클래스, 상태, 행위, 메소드, 컬렉션은 각각 패턴을 담고 있습니다. 그리고 발전하는 프레임워크에서는 일반 애플리케이션이 아니라 프레임워크를 만들 때에 고려할 사항을 설명합니다.
  • 클래스 - 왜, 어떻게 클래스를 생성해야 하는지, 클래스에 어떤 식으로 로직을 표현해야 하는가에 관한 패턴
  • 상태 - 상태를 저장하고 읽어오는 데 관한 패턴
  • 행위 - 로직, 특히 여러 개의 수행 경로를 표현하는 패턴
  • 메소드 - 메소드를 작성하는 데 관한 패턴.
  • 컬렉션 - 컬렉션을 선정하고 사용하는 데 관한 패턴
  • 발전하는 프레임워크 - 애플리케이션이 아닌 프레임워크를 작성할 때는 어떤 식으로 패턴을 변화시켜 사용해야 하는가?

읽은 소감

켄트 벡은 이 책으로 두 마리 토끼를 잡으려는 것 같습니다. 뭐라고 표현해야 할지 모르겠네요. 현실과 꿈, 좌뇌와 우뇌, 실리와 아름다움, 이성과 감성, 사유와 직관....

켄드 벡은 커뮤케이션을 위한 코딩'이라는 명제에서 시작하면서 두 가지 동기를 말합니다. 이 명제를 두 가지 기둥이 떠받들고 있는 모양입니다. 한 기둥은 이 책의 '동기' 부분에 설명되어 있습니다. 커뮤니케이션을 위한 코딩이 총 개발 비용을 줄여준다는 현실적인 이유를 들어 자신이 가려는 방향에 동참하도록 요청합니다.

제가 보기에 이 '동기'는 1차적인 '동기'에 쉽게 동의하지 않는 사람들을 설득하고자 추가로 생각해낸 부산물로 병원에서 아이들을 달래려고 주는 사탕 같아 보입니다. 비록 이 또한 매우 중요하지만 켄트 벡에게는 자신이 지향하는 바가 옳다는 것을 지지해주고 주장을 강하게 해주는 증거의 의미가 가장 크지 않을까 생각되더군요. 즉 이 현실적인 동기가 아니라도 켄트 벡은 여전히 커뮤니케이션을 위한 코딩을 했을 것으로 생각합니다.

책임감? 자부심?

켄트 벡이 커뮤니케이션을 중요하게 생각하는 진짜 이유는 - 여기서 진짜라는 말은 다른 동기들이 가짜라는 뜻이 아니라 켄트 벡의 마음을 움직이는 1차적인 동기를 뜻합니다 - 켄트 벡 자신이 말한 책임감이라는 것 같습니다. 머리말에서 저자는 이렇게 말합니다.
결국 이 책은 책임감에 대한 이야기이다. 여러분은 프로그래머로서 시간과 재능과 돈과 기회를 부여받았다. 이러한 자원들을 책임감 있게 잘 사용하려면 어떻게 해야 하는가? 이 책은 이러한 고민에 대한 나의 답이다.
저는 이 부분을 읽을 때에 책임감이라는 단어 위에 자부심이라는 단어가 겹쳐져서 보였습니다. 아무래도 우리나라는 도덕의 개인화가 발달하지 않아서 그런지 직업윤리를 강조하는 것이 (상대적으로) 그리 피부에 와 닿지 않습니다. 하지만 프로그래머로서 자기 직업을 자랑스럽게 여기고 남들이 인정해주지 않는 부분에도 정성을 다하려는 모습이 대신 떠오르면서 많이 공감이 되네요. 켄트 벡이 말하는 책임감도 이런 자부심 위에 있는 것 같습니다. 그냥 무미건조한 가운데 부가되는 의무감이 아닌 거죠. (비록 인정받는 것은 아니라고 해도) 남들 보다 더 보람된 직업을 갖고 있다는 자긍심이 묻어납니다.

네버엔딩 스토리

저자의 서문과 소갯글을 읽으면서 저는 네버엔딩 스토리가 생각나더군요. 한 소년이 이야기 세계로 들어가서 '무(無)'에게서 그 세계를 구하고는 다시 현실로 돌아오지 못해 어려움을 격다가 결국은 빠져나온다는 이야기입니다. 저는 늘 이 이야기 구조가 무엇을 말하는지 뚜렷하게 알지 못했는데 최근에 나름의 해석을 하게 되었습니다.

사람들은 누구나 창조, 아름다움, 꿈, 환상을 그리워합니다. 종종 이런 욕구가 고사하여 순전히 이성적이기만 한 것처럼 보이는 사람도 있지만 여전히 무의식에서는 이것에 대한 목마름이 끊이지 않지요. 하지만, 이것에만 빠져있는 것도 문제입니다. 그것은 현실이 아니니까요. 이렇게 꿈과 현실을 오가면서 새로운 것을 생각해내고 이것을 현실에 실현하는 작업을 반복하는 것, 즉 환상의 세계와 현실의 세계를 모두 균형 있게 유지하고 이 두 세계를 자유롭게 오가는 것이 삶을 풍요롭게 한다는 생각입니다.

저는 켄트 벡이 이 두 세계를 자유롭게 오가면서 자신의 생각을 훌륭하게 발전시키는 것 같아 보입니다. 시작은 자기가 사회적 존재라는 각성이었겠지요. 이 세상에 자기가 혼자가 아니라는 생각. 타인과 교류하고 싶은 목마름. 다른 사람에 대한 배려. 이러한 욕구를 작업에 반영할 방법을 찾게 되고 그 작업의 실질적인 가치를 도출해 내고 발전시키는 일련의 과정이 그려지더군요. 물론 이것은 어디까지나 제 상상이지만 말입니다.

가치, 원칙, 패턴의 관계?

(다시 현실로 돌아와서 ^^) 제가 이 책을 처음 읽었을 때 그리고 소감문을 작성하려고 했을 때 시도했던 작업은 가치와 원칙의 관계 그리고 다시 이것들이 각각 패턴에 어떤 영향을 주는지 도식화하는 것이었습니다. 분명히 책에 그런 관계가 있다고 되어 있었기 때문이지요. 그런데 제 분석력이 부족해서인지 어떤 원칙이 어떤 가치를 반영하는지도 명확하지 않고 어떤 패턴이 어떤 원칙과 관련되는지도 잘 파악되지 않는 경우가 많았습니다.
대표적인 예가 '선언적 표현'이라는 원칙입니다. 이 원칙은 제가 보기에 어떤 패턴과도 관계가 없어 보이더군요. 아마도 애노테이션이라는 패턴이 있었어야 할 듯합니다.

어쩌면 제가 좀 기계적으로 생각했나 봅니다. 전 가치에서 원칙이 도출되고 원칙에서 패턴이 도출된다는 식으로 생각했었지만  사실은 가치, 원칙, 패턴이 각각 거의 독립적으로 선정(또는 발견)이 되었고 원칙이 패턴에, 그리고 가치가 원칙에 의미를 부여하는 구조인 듯합니다.

엉성한 패턴

구현 패턴에 대해 여러 사람과 얘기해보지는 못했지만 이런저런 경로로 듣기로는 이 책에 대해 아쉬워하는 사람들이 있는 것 같더군요. 이유를 다 알지는 못하지만 어떤 사람은 패턴이 너무 엉성하다는 얘기를 했습니다. 빠진 것도 많고 패턴으로 굳이 말해야 하는지 의문인 것도 있다는 거죠. 저도 어떤 면에서는 비슷한 생각입니다.

켄트 벡도 이 부분에 대해서는 분명히 말한 것 같습니다. 패턴이 절대적이지 않다고도 했고 각자의 팀에서 고유의 패턴을 만들어 사용하라고도 했지요. 켄트 벡이 도출한 77가지 패턴은 일종의 샘플이라고 생각합니다. 앞서 설명한 가치와 원칙을 자바라는 언어에 적용했을 때에 어떤 패턴들을 발견할 수 있는지 보여주는 것입니다. 결국, 얼마든지 판단해서 패턴을 추가할 수도 있고 77가지 패턴 중 어떤 것은 무시할 수도 있는 문제인 거죠. 저자가 말하는 정말 중요한 것은 가치와 원칙을 늘 생각하는 것. 그리고 패턴으로 표현해서 커뮤니테이션을 효율적으로 하고 작업의 비용을 줄이는 것 같습니다.

토론을 요구

무엇보다 이 책을 읽고 든 첫인상은 토론을 유발하려는 목적이 있는 것 같다는 것입니다. 적어도 경험이 없는 초보자들이 패턴 설명만 읽고 의도와 내용을 파악하기는 어려울 것 같더군요. 친숙하지 않은 표현도 있고 그만큼 친절한 것 같지도 않습니다. 팀에서 선임되는 분들이 주도해서 학습할 뿐 아니라 토론을 해서 정확히 이해하도록 도와주는 것이 필요할 듯합니다.

제 생각에 켄트 벡의 책 중에서 가장 반향이 약한 책일 것이라고 생각되지만 그를 거론하면 떠오르는 TDD, 그리고 XP의 짝 프로그래밍에 이 "구현 패턴"은 무척 강력한 도구라고 생각합니다. 이 둘 다 "생각하는 프로그래밍"을 요구하기 때문이죠. 매 순간 생각하고 판단하고 표현하는 작업이 반복되어야 하는데 이때 '구현 패턴'이 상당한 노력을 줄여줄 것입니다. 무엇보다 짝 프로그래밍에서는 쉬지 않고 네비게이터가 코 파일럿에게 의도를 설명해야 하는데 구현 패턴을 둘 다 알고 있다면 무척 대화가 쉬울 것입니다.

따라서 토론을 통해서 구현 패턴을 보급하고 이해시키면 팀이 한층 단단히 결속되고 효율적으로 협업하게 될 듯하네요.

인터뷰

인터넷에서 구현 패턴 관련 인터뷰를 두 가지 찾았습니다. 원래 요약도 좀 하려고 했는데 다음 기회에 필요하면 해보겠습니다. 물론 InfoQ의 것은 text가 없어서... ^^);;

InfoQ : Kent Beck on Implementation Patterns
Kurt Christensen Interviews Kent Beck about Implementation Patterns

마인드 맵

가치, 원칙, 패턴 관계 도식화에 실패하고 대신 그려 놓았던 마인드 맵이 있어서 올립니다. 패턴 명의 원래 영문명을 알고 싶으신 분을 위해 영문으로 된 놈도 같이 첨부합니다.







by 박성철 | 2009/01/21 04:15 | 프로그래밍 이야기 | 트랙백 | 핑백(1) | 덧글(0)

트랙백 주소 : http://gyumee.egloos.com/tb/2263191
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at [구현패턴] 켄트벡의 구현패턴.. at 2014/01/20 11:02

... 설명되어있습니다. 총 10장으로 구성되어있습니다. 아래의 두 이미지는 블로그 http://gyumee.egloos.com/2263191 에 있는 이미지입니다. 켄트벡의 구현패턴을 보고 리뷰형식으로 내용 및 생각들이 ... more

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶